Tüm maven bağımlılıklarını arşivde OLMAYAN bir dizine mi indiriyorsunuz?


128

Yalnızca maven üzerinden ikili biçimde dağıtılan bir kitaplığı kullanmam gerektiğinden projemi maven'e dönüştürmeye başladım, ancak kafamı duvara uzun süre vurduktan sonra kendime zarar vermeyi bırakıp sadece kullanmaya karar verdim Karınca. Sadece maven'i ve tüm geçişli bağımlılıklarını seçtiğim bir dizine indirmesini istiyorum, böylece onları normalde zevk aldığım gibi SCM'me kontrol edebilir ve bir kez daha mutlu bir geliştirici olabilirim.
Bunu nasıl kolayca yapacağına dair bir fikrin var mı?


2
Ivy kullanmayı düşünün ve güvendiğiniz Ant ile ihtiyaç duyduğunuz geçişli bağımlılık yönetimini edinin. Veya mermiyi ısırıp Maven dizin yapısını kullanın.
Dave Newton

Ivy yi denedin mi?
Tomasz Nurkiewicz

5
Hayır, ancak bu noktada tüm sabrımı değiştirmeye harcadım. Belki bir dahakine. Kodlamaya geri dönmek istiyorum. Maven ile yapılabilir mi?
chubbsondubs

Yanıtlar:


261

Maven bağımlılık eklenti potansiyel olarak sorunu çözebilir.

pomTüm proje bağımlılıklarınızı belirtmişseniz , yapmanız gereken tek şey çalıştırmaktır

mvn dependency:copy-dependencies

ve target/dependenciesgeçiş dahil tüm bağımlılıklarla dolu klasörü bulacaksınız .

Aşağıdan Gustavo'nun cevabını eklemek : Bağımlılık kaynaklarını indirmek için şunu kullanabilirsiniz:

mvn dependency:copy-dependencies -Dclassifier=sources

( Apache Maven Bağımlılık Eklentisi belgesi aracılığıyla ).


1
Thx @Raghuram, bunu asırlardır arıyorum.
eskalera

ama ya tüm bağımlılıkları yerel depoma kopyalamak istersem? Bunun için kullanılması mı gerekiyor? Zaten yerel depodaysa neden kopyalayalım? Zaten yerel.
ses

1
@ses Standart bir maven derlemesi (örn. derleme, test etme, paketleme, yükleme vb .; doğrulama konusunda emin değil), varsayılan olarak tüm bağımlılıkları yerel deponuza zaten kopyalar. Bu onun için değil. Bunun yerine, uygulamanızın bağımlılıklarına herhangi bir nedenle ihtiyaç duyduğunuz durumlar içindir. Şu anda onu bağımlı kitaplıkları gereksiz API tanımları açısından incelemek için kullanıyorum (örneğin, bazı kitaplıklar aynı API'nin diğer sürümleriyle çakışabilecek Javax API'lerini içerecektir), ancak uygulamanızın kendisiyle birlikte paketlenmiş bağımlılıklarına ihtiyacı varsa da iyi dağıtım için veya her neyse.
Spanky Quigman

1
Net, özlü ve faydalı bir cevap için +1. OP ile aynı Maven dansını yaptım ve sadece JAR dosya bağımlılıklarını almak istedim. Teşekkürler! Keşke +10 yapabilseydim
Brandon

@Raghuram Teknik olarak , "hedef / bağımlılıklardaki" tüm (çözülmüş) eserlerle sonuçlanırsınız . Ayrıca, bir bağımlılığın "groupId" koordinatı göz ardı edildiğinden potansiyel ad çakışmaları problemi vardır. Başka bir deyişle, "bağımlılık: kopya bağımlılıkları" düzen yapısını korumaz.
whaefelinger

8

@Raghuram cevabına dayanarak, proje bağımlılıklarını kopyalama hakkında bir eğitim buldum , Sadece:

  1. Proje pom.xmldosyanızı açın ve şunu bulun:

    <project>
      [...]
      <build>
        <plugins>
          ...
        </plugins>
      </build>
      [...]
    </project>
    
  2. Daha sonra <plugins> ... </plugins>şununla değiştirin :

    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <version>3.0.0</version>
        <executions>
          <execution>
            <id>copy-dependencies</id>
            <phase>package</phase>
            <goals>
              <goal>copy-dependencies</goal>
            </goals>
            <configuration>
              <outputDirectory>${project.build.directory}/alternateLocation</outputDirectory>
              <overWriteReleases>false</overWriteReleases>
              <overWriteSnapshots>false</overWriteSnapshots>
              <overWriteIfNewer>true</overWriteIfNewer>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
    
  3. Ve komut satırından maven'i çağırın mvn dependency:copy-dependencies

Tamamlandıktan sonra, klasörün yaşadığı mevcut dizindeki target/dependencytüm jarbağımlılıkları içinde oluşturacaktır pom.xml.


"Mvn" komutunu nereye yazmalıyım? Sağ tıklayın maven-proje-> Maven -> .. ??
Baked Inhalf

pom.xmlDosyanın bulunduğu klasördeki bir terminal komut satırında .
kullanıcı

1
İşe yaramadı. Maven'in yalnızca bir eklenti olarak kurulduğunu düşünüyorum. Maven'i de manuel olarak indirmem gerekiyordu. Sonra mvn dependency:copy-dependenciesçalıştı!
Baked Inhalf

8

Sonunda Maven'i nasıl kullanacağımı buldum. Eclipse içinden yeni bir Maven projesi oluşturun.

Maven'i indirin, arşivi çıkarın, /binklasörü yola ekleyin .

Çalıştırarak komut satırından yüklemeyi doğrulayın mvn -v(sürümü ve java yükleme yolunu yazdıracak)

Proje kök klasörüne geçin (nerede pom.xmlbulunur) ve çalıştırın:

mvn dependency:copy-dependencies

Tüm jar dosyaları indirilir /target/dependency.

Başka bir çıktı dizini ayarlamak için:

mvn dependency:copy-dependencies -DoutputDirectory="c:\temp"

Artık bu Maven projesini tüm bağımlılık indirmeleri için pom.xml dosyasını değiştirerek yeniden kullanmak mümkündür.

Derleme yolu ile java projesine kavanoz ekleyin -> inşa yolunu yapılandırın -> kitaplıklar -> JAR ekleyin ..


1
Bir tutulma projesi olmak zorunda değil. Java Decompiler'da bir jar dosyası açtım ve pom.xml'yi boş bir klasöre kopyaladım. mvn dependency:copy-dependenciesO klasörden anlattığınız gibi aradım ve tüm bağımlı jar dosyalarını tek bir klasöre güzelce kopyaladım.
Bernhard Döbler


2

Lütfen ${MAVEN_HOME}/confdizinde gibi bazı yapılandırma dosyalarınız olup olmadığını kontrol edin settings.xml. Bu dosyalar, .m2klasördeki ayarları geçersiz kılar ve bu nedenle, gelen depo klasörü .m2görünmeyebilir veya atılmayabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.