Gibt es eine Möglichkeit, mit Maven 2 die JAR-Abhängigkeiten nur als Dateinamen aufzulisten?
mvn dependency:build-classpath
kann die JAR-Dateien auflisten, aber das schließt den vollständigen Pfad zu ihrem Speicherort in meinem lokalen Repository ein. Was ich brauche, ist im Wesentlichen nur eine Liste der Dateinamen (oder der Dateinamen, die das Ziel der Kopierabhängigkeiten kopiert hat).
Die Liste, die ich brauche, wäre also so etwas wie
activation-1.1.jar,antlr-2.7.6.jar,aopalliance-1.0.jar etc...
Idealerweise als Maven-Eigenschaft, aber ich denke, eine Datei wie Build-Classpath kann ausreichen.
Was ich erreichen Bundle-ClassPath
möchte , ist das Schreiben einer Datei in eine ansonsten manuell verwaltete MANIFEST.MF-Datei für ein OSGi-Bundle. (Sie sollten dieses Bit nicht verstehen müssen, um die Frage zu beantworten.)
Zur Verdeutlichung: Bei der Frage geht es nicht darum, wie Manifest-Header in die MANIFEST.MF-Datei in einem JAR geschrieben werden (das ist leicht googleble). Ich frage, wie ich die Daten bekomme, die ich schreiben möchte, nämlich die oben gezeigte Liste.
quelle
Antworten:
Dieser Befehl generiert den Abhängigkeitsbaum Ihres Maven-Projekts:
$ mvn dependency:tree
Ich bin sicher, dass Ihnen das Ergebnis gefallen wird :-)
quelle
Soweit ich das beurteilen kann, kann man mit Kommas und Leerzeichen nicht genau diese Ausgabe erhalten. Sowohl über die Befehlszeile als auch über die Datei pom.xml flippt das Maven-Dependency-Plugin oder die CLI aus, wenn Sie Leerzeichen oder das '' (leere Zeichenfolge) als Ersatz für entweder
pathSeparator
oder angebenfileSeparator
. Sie könnten also gezwungen sein, einen Kompromiss zu erzielen. Sie könnenDamit sollten Sie jedoch eine vollständige Liste erhalten, die durch
'::'
statt nur getrennt ist','
, aber es funktioniert. Wenn du läufst:und hängen Sie dies an die
generate-resources
Phase an und filtern Sie diese Ressource später, indem Sie die richtige Eigenschaft in derprocess-resources
Phase des Lebenszyklus festlegen. Sie sollten nur das Komma erhalten können.Die vollständige Liste der Optionen finden Sie unter: http://maven.apache.org/plugins/maven-dependency-plugin/build-classpath-mojo.html
quelle
Hier ist der Befehl, nach dem Sie fragen
$ mvn dependency:tree
Bei großen Projekten kann viel Text ausgegeben werden. Ich gehe davon aus, dass Sie überprüfen möchten, ob der Abhängigkeitsbaum eine bestimmte Abhängigkeit enthält, sodass Sie keine vollständige Liste benötigen.
So können Sie die Ausgabe unter Windows filtern:
$ mvn dependency:tree | findstr javax.persistence
Und so geht's unter Linux:
$ mvn dependency:tree | grep javax.persistence
Maven-Methode zum Filtern des Abhängigkeitsbaums (funktioniert in Windows-Cmd-, MacOS- und Linux-Shell):
$ mvn dependency:tree -Dincludes=javax.persistence:*
Maven Weg (Windows PowerShell):
$ mvn dependency:tree '-Dincludes=javax.persistence:*'
quelle
Verwenden Sie für die endgültige Liste der Gläser einfach
mvn dependency:list
Was viel einfacher ist als die Abhängigkeit: Baum, der ein Overkill ist, um einfach die endgültige Liste zu erhalten, da er einen detaillierten transitiven Baum und eine Konfliktlösung (mit ausführlicher Beschreibung) zeigt.
quelle
mvn dependency:list -Dsort=true
Haben Sie sich das Apache Felix- Projekt angesehen? Es hat eine ganze Reihe von Plugins, einschließlich eines Bundle-Plugins , das tun sollte, was Sie wollen.
Haben Sie auch versucht, das
<addClasspath>
Tag mit<manifestFile>
? Dies sollte den gewünschten Effekt haben, den Klassenpfad in Ihrem Manifest zusammenzuführen.<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>
quelle
Ich vermisse hier vielleicht etwas, aber da Sie bereits Kopierabhängigkeiten verwendet haben, klingt es so, als ob Sie wirklich nur eine Liste von Dateien in einem bestimmten Verzeichnis suchen.
Ant kann dies problemlos für Sie tun, ebenso wie ein Shell-Skript.
quelle
Maven kann den Klassenpfad in Ihrem Manifest automatisch erstellen: http://maven.apache.org/guides/mini/guide-manifest.html
Es ist eine Konfiguration des Maven-Archiv-Plugins.
quelle
Um den vorhandenen Antworten eine Kerbe hinzuzufügen, können Sie mit dem aktuellen Maven-Dependency-Plugin den Klassenpfad in einer Eigenschaft mit dem
outputProperty
Parameter speichern .quelle
Hier ist ein awk-Skript zum Weiterleiten
mvn dependency:list
:mvn dependency:list | awk -f mvnfmt.awk
Sie können,
| sort
wenn Sie nach Namen sortieren oder| tr '\n' ':'
in einen Klassenpfad formatieren möchten .mvnfmt.awk
ist:BEGIN { found = 0 } /The following files have been resolved/ { found = 1 next } /^\[INFO\] \$/ { print "Empty " found if (found != 0) found = 0 } { if (!found) next n = split($0, a, " ") if (n != 2) { found = 0 next } split(a[2], a, ":") print a[2] "-" a[4] "." a[3] }
quelle