2008-11-10 18 views
47

Maven 2'yi kullanarak, jar bağımlılıklarını yalnızca dosya adları olarak görebilmem için bir yol var mı?Maven'de bağımlılık jar dosyaları listesi

mvn dependency:build-classpath 

kavanoz dosyaları listeleyebilirsiniz, ama bu benim yerel depoda konumlarına tam yolunu içerecektir. İhtiyacım olan şey sadece dosya adlarının (ya da kopyalanan kopyaların hedeflenen dosya adlarının) bir listesi.

yüzden ihtiyacım listesi maven özelliği olarak ideal

activation-1.1.jar,antlr-2.7.6.jar,aopalliance-1.0.jar etc... 

gibi bir şey olurdu, ama ben böyle yapacağım üretebilir birikmesi sınıf yolunda gibi bir dosyayı sanırım.

Elde etmeye çalıştığım bir OSGi paketi için başka bir el ile korunan MANIFEST.MF dosyasına Bundle-ClassPath yazıyor. (Sen soruyu cevaplamak için bu biraz anlamak gerekmez.)

netleştirmek için: soru (kolayca yani googleble) bir kavanoza MANIFEST.MF dosyasına tezahür başlıklarını yazma ilgili değilolduğunu . Yazmak istediğim verileri, yani yukarıda gösterilen listeyi nasıl alacağımı soruyorum.

+0

sadece bağımlılık eklentisi için bir yama göndermek ve bunu uygularız Bir sonraki sürüme. Yapı sınıf yolu, istediğiniz şeye en yakın şeydir, sadece istenen çıktıyı elde etmek için seçenekleri değiştirmemiz gerekir. –

cevap

5

Apache Felix projesine göz attınız mı? İstediğiniz şeyi yapması gereken bir bundle plugin dahil olmak üzere bir sürü eklenti vardır.

<manifestFile> ile <addClasspath> etiketini denediniz mi? Bu, sınıf yolunu tezahürünüze birleştirmek için istenen etkiye sahip olmalıdır.

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId> 
    ... 
    <configuration> 
    <archive> 
     <addClasspath>true</addClasspath> 
     <manifestFile>src/main/resources/META-INF/MANIFEST.MF</manifestFile> 
    </archive> 
    </configuration> 
    ... 
</plugin> 
+0

Apache Felix'in farkındayım, ama ihtiyacım olanı yapmamak, bunu el ile yapmamın nedeni budur. –

+0

addClasspath, Class-Path manifest üstbilgisine bir kavanoz listesi ekleyecektir, maven-jar-plugin dokümanlarını görmüyorum, sınıf yolunu diğer başlıklara yerleştirebileceğinden bahsediyorum. Ayrıca Bundle-Classpath'ın sadece bir kavanoz listesinden daha fazlasına ihtiyacı var. –

16

Anlatabildiğim kadarıyla, bu çıktının tamamını, virgüllerle ve boşluk olmadan elde edemezsiniz. Hem komut satırı hem de pom.xml dosyası aracılığıyla, maven bağımlılık eklentisi veya CLI boşlukları belirtirseniz ya da pathSeparator ya da fileSeparator ya da fileSeparator ile yedek olarak '' (boş dize) ortaya çıkarır. Yani, bir uzlaşma yoluna ulaşmak zorunda kalabilirsiniz. Sen

 
    mvn dependency:build-classpath -Dmdep.pathSeparator=":" -Dmdep.prefix='' -Dmdep.fileSeparator=":" -Dmdep.outputFile=classpath 

Ancak bu sana yerine ',' ait '::' ile ayrılmış tam bir listesini, almalısınız olabilir, ama işe yarıyor. Eğer çalıştırırsanız:

 
    mvn dependency:build-classpath -Dmdep.pathSeparator="@REPLACEWITHCOMMA" -Dmdep.prefix='' -Dmdep.fileSeparator="@" -Dmdep.outputFile=classpath 

ve yaşam döngüsünün process-resources aşamasında doğru özelliğini ayarlayarak daha sonra generate-resources faz ve filtreye o kaynağın bu takmak, sen sadece almak mümkün olmalıdır virgül.

Sen Seçeneklerin tam listesini görebilirsiniz: burada bir şey eksik olabilir http://maven.apache.org/plugins/maven-dependency-plugin/build-classpath-mojo.html

+1

Harika cevap! -Dmdep.pathSeparator = ',' -Dmdep.prefix = 'kullanırsanız.' -Dmdep.fileSeparator = '/' göreceli dosya adlarının virgülle ayrılmış bir listesini alırsınız ve bu da bir la ./file1.jar./file2.jardır. – Eero

2

ama zaten kopyalamaya karşı bağımlılıkları kullandım olarak bu sadece bir liste ne gerçekten peşinde olduğumuz gibi geliyor belirtilen bir dizindeki dosyaların.

Ant, herhangi bir sorun olmadan, bir kabuk betiği gibi sizin için bunu yapabilir.

58

senin maven projesi bağımlılıkları ağacını üretecek Bu komut:

$ mvn dependency:tree 

Ben mevcut cevaplara bir çentik eklemek için

1

:-) sonucu gibi eminim, akım maven-bağımlılık-eklentisi, outputProperty parametresi ile sınıf yolunun bir özelliğe kaydedilmesine izin verir.

0

Burada o çıktı miktarda metin can Büyük projeler için

$ mvn dependency:tree 

istiyorlar komutu var. Bağımlılık ağacının belirli bir bağımlılık içerdiğini kontrol etmek istediğinizi düşündüğünüz için tam listeye ihtiyacınız yok. İşte

Windows üzerinde filtre çıkış yapabilirsiniz:

$ mvn dependency:tree | findstr javax.persistence 

Ve burada Linux üzerinde bunu yapabilirsiniz:

$ mvn dependency:tree | grep javax.persistence