2008-11-10 20 views
47

Mit Maven 2, gibt es eine Möglichkeit, die JAR-Abhängigkeiten als nur die Dateinamen auflisten?Liste der Abhängigkeit JAR-Dateien in Maven

können die JAR-Dateien auflisten, aber das wird den vollständigen Pfad zu ihrem Speicherort in meinem lokalen Repository enthalten. Was ich brauche, ist im Wesentlichen nur eine Liste der Dateinamen (oder der Dateinamen, die das Kopierabhängigkeitsziel kopiert hat).

So ist die Liste, die ich brauchen würde, so etwas wie

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

ideal als Maven Eigenschaft, aber ich denke, eine Datei wie build-classpath sein kann tun erzeugen.

Was ich versuche zu erreichen, ist eine Bundle-ClassPath in eine ansonsten manuell gepflegte MANIFEST.MF-Datei für ein OSGi-Bundle zu schreiben. (Sie sollten dieses Bit nicht verstehen müssen, um die Frage zu beantworten.)

Zur Klärung: Die Frage ist nicht über das Schreiben von Manifest-Kopfzeilen in die Datei MANIFEST.MF in einem Glas (das ist leicht googleble) . Ich frage, wie man die Daten, die ich schreiben möchte, erhält, nämlich die oben gezeigte Liste.

+0

einreichen nur einen Patch für die Abhängigkeit Plugin, und ich werde es anwenden zur nächsten Veröffentlichung. Der Build-Klassenpfad ist dem, was Sie wollen, am nächsten. Wir müssen nur die Optionen optimieren, um die gewünschte Ausgabe zu erhalten. –

Antwort

5

Haben Sie sich das Projekt Apache Felix angesehen? Es hat eine ganze Menge von Plugins, einschließlich einer bundle plugin, die tun sollte, was Sie wollen.

Haben Sie auch versucht, die <addClasspath> Tag mit ? Dies sollte den gewünschten Effekt haben, den Klassenpfad in Ihr Manifest zu integrieren.

<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

Ich kenne Apache Felix, aber das tut nicht, was ich brauche, weshalb ich das manuell mache. –

+0

addClasspath fügt dem Klassenpfad-Manifest-Header eine Liste von Jars hinzu. Ich sehe nicht, dass maven-jar-plugin docs den Klassenpfad in andere Header einfügen kann. Auch der Bundle-Classpath benötigt mehr als nur eine Liste von Gläsern. –

16

So gut ich kann sagen, Sie können nicht genau diese Ausgabe erhalten, mit den Kommas und keine Leerzeichen. Sowohl über die Befehlszeile als auch über die Datei pom.xml flippt das maven-dependency-plugin oder die CLI aus, wenn Sie Leerzeichen oder '' (leere Zeichenfolge) als Ersatz angeben, entweder mit pathSeparator oder fileSeparator. Sie könnten also gezwungen sein, einen Kompromiss zu finden. Sie können

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

jedoch, dass sollten Sie eine vollständige Liste, getrennt durch '::' statt nur ',', aber es funktioniert. Wenn Sie laufen:

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

und dies auf die gerade die generate-resources Phase und Filter diese Ressource später durch die richtige Eigenschaft in der process-resources Phase des Lebenszyklus Einstellung Sie sollte Lage befestigen zu bekommen, Komma.

Sie können die vollständige Liste der Optionen sehen: http://maven.apache.org/plugins/maven-dependency-plugin/build-classpath-mojo.html

+1

Große Antwort! Wenn Sie -Dmdep.pathSeparator = ',' -Dmdep.prefix = 'verwenden. -Dmdep.fileSeparator = '/' Sie erhalten eine durch Kommas getrennte Liste von relativen Dateinamen a la ./file1.jar,./file2.jar, die dann die Notwendigkeit der Filterung vermeidet. – Eero

2

ich hier etwas fehlt, aber wie Sie bereits copy-Abhängigkeiten verwendet haben, es klingt wie das, was Sie wirklich nach ist nur eine Liste von Dateien in einem angegebenen Verzeichnis.

Ant kann dies für Sie ohne Probleme tun, ebenso wie ein Shell-Skript.

58

Dieser Befehl wird die Abhängigkeiten Baum Ihrer Maven Projekt erzeugen:

$ mvn dependency:tree 

Ich bin sicher, dass Sie :-)

1

Um eine Kerbe zu den bestehenden Antworten addiere das Ergebnis gefallen wird, die aktuelle maven-dependency-plugin ermöglicht das Speichern des Klassenpfads in einer Eigenschaft mit dem Parameter outputProperty.

0

Hier ist der Befehl, den Sie für die Nachfrage sind

$ mvn dependency:tree 

Für große Projekte kann er ausgegeben viel Text. Ich nehme an, dass Sie überprüfen möchten, dass der Abhängigkeitsbaum eine bestimmte Abhängigkeit enthält, sodass Sie keine vollständige Liste benötigen.

Hier ist, wie Sie die Ausgabe auf Windows filtern:

$ mvn dependency:tree | findstr javax.persistence 

Und hier ist, wie Sie es auf Linux tun können:

$ mvn dependency:tree | grep javax.persistence