2014-03-12 3 views
11

Ich habe mich gefragt: Gibt es eine Möglichkeit, die Maven Dependency plug-in (oder etwas anderes auf der Kommandozeile) verwenden, die transitiven Abhängigkeiten eines Artefakts zur Liste von einem Repository (dh nicht in meinem pom.xml)?Wie listen Sie die transitiven Abhängigkeiten eines Artefakts von einem Repository auf?

Ich weiß, kann mvn dependency:tree verwenden, um die Abhängigkeiten von meinem lokalen Projekt zur Liste, aber ich will die Abhängigkeiten von etwas wissen, bevor ich es mein Projekt hinzufügen (dh, eine informierte Entscheidung treffen), und fügen Sie Abhängigkeiten zu einem lokalen pom.xml für den einzigen Zweck der Abhängigkeit Plug-in scheint hackish.

Ich war der Hoffnung konnte ich laufen nur so etwas wie:

mvn dependency:tree "-DgroupId=net.jawr" "-DartifactId=jawr-core" "-Dversion=3.5" 

Das Beste, was ich habe kommen mit ist:

  1. meinem lokalen Repository löschen (dh ~/.m2/repository)
  2. run mvn dependency:get "-DgroupId=net.jawr" "-DartifactId=jawr-core" "-Dversion=3.5"
  3. untersuchen Sie die Ausgabe

aber das scheint sehr hackish und verschwenderisch.

PS - Es ist mir egal, ob es im Baumformat oder nicht ist.

+0

können Sie eine Dummy-Abhängigkeit hinzufügen? Ich meine, erstellen Sie ein leeres Projekt mit einer Abhängigkeit von dem Remote-Artefakt, dann verwenden Sie mvn Abhängigkeit: Baum? EDIT: Ah, ich sehe, du hast das schon als hackish abgetan. Meinetwegen. –

+0

@GrahamGriffiths Ich versuche zu sehen, ob es einen "richtigen Weg" gibt, aber zu diesem Zeitpunkt sieht es wie ein fehlendes Feature aus. – ArtB

+0

vereinbart ... es scheint, dass Maven nicht zwischen "Abhängigkeiten auflösen" und "Abhängigkeiten holen" unterscheidet –

Antwort

18

Ich bin nicht bekannt, dass nativer Weg, dies mit Maven zu tun, aber ich kam mit dem folgenden Shell-Skript auf, die die Arbeit zu tun scheint:

#!/bin/sh 
if [ "$#" -ne 3 ]; then 
    echo "Usage: $0 <groupId> <artifactId> <version>" 
    exit 
fi 

POM_DIR="`echo "$1" | tr . /`/$2/$3" 
POM_PATH="$POM_DIR/$2-$3.pom" 

mkdir -p "$HOME/.m2/repository/$POM_DIR" 
wget -q -O "$HOME/.m2/repository/$POM_PATH" "http://repo.maven.apache.org/maven2/$POM_PATH" 
mvn -f "$HOME/.m2/repository/$POM_PATH" dependency:tree 

dieser Skripte lädt die POM für das Artefakt Sie geben von Maven Central Repository und führt dann dependency:tree Ziel für das POM. Beispiel:

[email protected]:~$ ./deptree net.jawr jawr-core 3.5 
[INFO] Scanning for projects... 
[INFO]                   
[INFO] ------------------------------------------------------------------------ 
[INFO] Building Java web resources bundling and compression 3.5 
[INFO] ------------------------------------------------------------------------ 
[INFO] 
[INFO] --- maven-dependency-plugin:2.1:tree (default-cli) @ jawr-core --- 
[INFO] net.jawr:jawr-core:jar:3.5 
[INFO] +- javax.servlet:servlet-api:jar:2.5:provided 
[INFO] +- javax.servlet.jsp:jsp-api:jar:2.1:provided 
[INFO] +- org.mozilla:rhino:jar:1.7R4:provided 
[INFO] +- com.yahoo.platform.yui:yuicompressor:jar:2.4.7:provided 
[INFO] +- javax.faces:jsf-api:jar:1.1_02:provided 
[INFO] +- commons-validator:commons-validator:jar:1.2.0:provided 
[INFO] | +- commons-beanutils:commons-beanutils:jar:1.7.0:provided 
[INFO] | +- commons-digester:commons-digester:jar:1.6:provided 
[INFO] | | \- commons-collections:commons-collections:jar:2.1:provided 
[INFO] | +- commons-logging:commons-logging:jar:1.0.4:provided 
[INFO] | +- oro:oro:jar:2.0.8:provided 
[INFO] | \- xml-apis:xml-apis:jar:1.0.b2:provided 
[INFO] +- taglibs:standard:jar:1.1.2:provided 
[INFO] +- net.sf.ehcache:ehcache:jar:2.7.4:provided 
[INFO] +- com.carrotsearch:smartsprites:jar:0.2.10:provided 
[INFO] | +- com.google.guava:guava:jar:14.0.1:provided 
[INFO] | +- args4j:args4j:jar:2.0.16:provided 
[INFO] | +- org.apache.commons:commons-math3:jar:3.0:provided 
[INFO] | +- commons-io:commons-io:jar:2.4:provided 
[INFO] | \- org.apache.commons:commons-lang3:jar:3.1:provided 
[INFO] +- com.google.javascript:closure-compiler:jar:v20131014:provided 
[INFO] | +- com.google.protobuf:protobuf-java:jar:2.4.1:provided 
[INFO] | +- org.json:json:jar:20090211:provided 
[INFO] | \- com.google.code.findbugs:jsr305:jar:1.3.9:provided 
[INFO] +- org.slf4j:slf4j-api:jar:1.7.5:compile 
[INFO] +- org.slf4j:slf4j-log4j12:jar:1.7.5:provided 
[INFO] +- log4j:log4j:jar:1.2.17:provided 
[INFO] +- junit:junit:jar:4.11:test 
[INFO] | \- org.hamcrest:hamcrest-core:jar:1.3:test 
[INFO] \- org.mockito:mockito-all:jar:1.9.5:test 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESS 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 0.756s 
[INFO] Finished at: Fri Mar 14 21:00:41 MSK 2014 
[INFO] Final Memory: 10M/181M 
[INFO] ------------------------------------------------------------------------ 

(Ich könnte wahrscheinlich unnötig Maven Ausgabe abzustreifen, wenn ich wollte)

Dies ist jedoch .jar-Dateien für Abhängigkeiten zum Download erscheint, so kann ich nicht sagen, es ist eine saubere Lösung . Aber zumindest müssen Sie Ihr lokales Repository nicht löschen.