2011-01-04 8 views
6

Ich bin sehr interessiert an wie ich herausfinden kann, was die Gläser sind, dass die Abhängigkeiten in der pom.xml der Maven von abhängen.Wie man die Gläser herausfinden kann, von denen die Abhängigkeiten in der pom.xml des Maven abhängen?

Ich bin es gewohnt, das Hinzufügen von Bibliotheken (Gläser) selbst in meinem Web-Anwendungsprojekt. Ich stieß auf dieses Bedürfnis, als ich versuchte, die Frühjahr 3.0-Proben zu konfigurieren. Ich mag es wirklich nicht, dass alles mit dem Frühling 3.0.x. An diesem Punkt scheint es, dass ich nicht tiefer in das Abhängigkeitslabyrinth des Maven graben kann und es zu lernen wie ein Muss aussieht. Aber ich würde es sehr schätzen, wenn mir jemand sagen könnte, wie ich diese Informationen herausfinden kann.

Zum Beispiel für die folgende pom.xml würde ich gerne wissen, was die Abhängigkeit mit artifactId Spring-Kontext abhängt. (Ich kann sehen, dass es von Commons-Logging abhängt, da der Ersteller der Probe es ausschließt - wollte slf4j anstelle von Commons-Logging verwenden.). Ich möchte den Rest der Abhängigkeiten für die Abhängigkeit mit artifactId spring-context herausfinden, und das gleiche für den Rest der Abhängigkeiten! Wie kann ich das machen?

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
    http://maven.apache.org/maven-v4_0_0.xsd"> 
<modelVersion>4.0.0</modelVersion> 
<groupId>org.springframework.samples</groupId> 
<artifactId>mvc-ajax</artifactId> 
<name>mvc-ajax</name> 
<packaging>war</packaging> 
<version>1.0.0-SNAPSHOT</version> 
<properties> 
    <org.springframework.version>3.0.5.RELEASE</org.springframework.version> 
    <org.slf4j.version>1.6.1</org.slf4j.version> 
</properties> 
<dependencies> 

    <!-- Spring --> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context</artifactId> 
     <version>${org.springframework.version}</version> 
     <exclusions> 
      <!-- Exclude Commons Logging in favor of SLF4j --> 
      <exclusion> 
       <groupId>commons-logging</groupId> 
       <artifactId>commons-logging</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-webmvc</artifactId> 
     <version>${org.springframework.version}</version> 
    </dependency> 

    <!-- Logging --> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
     <version>${org.slf4j.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>jcl-over-slf4j</artifactId> 
     <version>${org.slf4j.version}</version> 
     <scope>runtime</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-log4j12</artifactId> 
     <version>${org.slf4j.version}</version> 
     <scope>runtime</scope> 
    </dependency> 
    <dependency> 
     <groupId>log4j</groupId> 
     <artifactId>log4j</artifactId> 
     <version>1.2.16</version> 
     <scope>runtime</scope> 
    </dependency> 

    <!-- JSR 303 with Hibernate Validator --> 
    <dependency> 
     <groupId>javax.validation</groupId> 
     <artifactId>validation-api</artifactId> 
     <version>1.0.0.GA</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-validator</artifactId> 
     <version>4.1.0.Final</version> 
    </dependency> 

    <!-- Joda Time --> 
    <dependency> 
     <groupId>joda-time</groupId> 
     <artifactId>joda-time</artifactId> 
     <version>1.6.2</version> 
     <scope>runtime</scope> 
    </dependency> 

    <!-- Jackson JSON Mapper --> 
    <dependency> 
     <groupId>org.codehaus.jackson</groupId> 
     <artifactId>jackson-mapper-asl</artifactId> 
     <version>1.6.4</version> 
    </dependency> 

    <!-- Servlet --> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>servlet-api</artifactId> 
     <version>2.5</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>javax.servlet.jsp</groupId> 
     <artifactId>jsp-api</artifactId> 
     <version>2.1</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>jstl</artifactId> 
     <version>1.2</version> 
    </dependency> 

    <!-- Test --> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.7</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-test</artifactId> 
     <version>${org.springframework.version}</version> 
     <scope>test</scope> 
    </dependency> 
</dependencies> 
<repositories> 
    <!-- For Hibernate Validator --> 
    <repository> 
     <id>org.jboss.repository.release</id> 
     <name>JBoss Maven Release Repository</name>   
<url>https://repository.jboss.org/nexus/content/repositories/releases</url> 
     <snapshots><enabled>false</enabled></snapshots>   
    </repository>  
</repositories> 
<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <configuration> 
       <source>1.5</source> 
       <target>1.5</target> 
       <showWarnings>true</showWarnings> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-dependency-plugin</artifactId> 
      <executions> 
       <execution> 
        <id>install</id> 
        <phase>install</phase> 
        <goals> 
         <goal>sources</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 
</project> 

Mit freundlichen Grüßen,
Despot

EDIT (einige Follow-up auf die Antwort von Sean):
1) Download Maven (I heruntergeladene Version 2.2.1) und Befolgen Sie die dort angegebenen Installationsanweisungen.
2) Öffnen Sie dann die Eingabeaufforderung und wechseln Sie zum Verzeichnis der pom.xml
3) Führen Sie den Befehl "mvn dependency: tree" wie empfohlen aus. (Ich habe versucht mit -DoutputFile = "somePath" oder -Dinclude = spring-context -> es war nicht in der Datei in den Pfad geschrieben und es war die Auswahl aller Abhängigkeiten statt Feder-Kontext - unabhängig von der allgemeinen Befehl wird genügen). Warten Sie eine Weile, bis das System alle benötigten Informationen zum Download und am Ende werden Sie so etwas wie dieses:

[INFO] [dependency:tree {execution: default-cli}] 
[INFO] org.springframework.samples:mvc-ajax:war:1.0.0-SNAPSHOT 
[INFO] +- org.springframework:spring-context:jar:3.0.5.RELEASE:compile 
[INFO] | +- org.springframework:spring-aop:jar:3.0.5.RELEASE:compile 
[INFO] | | \- aopalliance:aopalliance:jar:1.0:compile 
[INFO] | +- org.springframework:spring-beans:jar:3.0.5.RELEASE:compile 
[INFO] | +- org.springframework:spring-core:jar:3.0.5.RELEASE:compile 
[INFO] | +- org.springframework:spring-expression:jar:3.0.5.RELEASE:compile 
[INFO] | \- org.springframework:spring-asm:jar:3.0.5.RELEASE:compile 
[INFO] +- org.springframework:spring-webmvc:jar:3.0.5.RELEASE:compile 
[INFO] | +- org.springframework:spring-context-support:jar:3.0.5.RELEASE: 
     compile 
[INFO] | \- org.springframework:spring-web:jar:3.0.5.RELEASE:compile 
[INFO] +- org.slf4j:slf4j-api:jar:1.6.1:compile 
[INFO] +- org.slf4j:jcl-over-slf4j:jar:1.6.1:runtime 
[INFO] +- org.slf4j:slf4j-log4j12:jar:1.6.1:runtime 
[INFO] +- log4j:log4j:jar:1.2.16:runtime 
[INFO] +- javax.validation:validation-api:jar:1.0.0.GA:compile 
[INFO] +- org.hibernate:hibernate-validator:jar:4.1.0.Final:compile 
[INFO] +- joda-time:joda-time:jar:1.6.2:runtime 
[INFO] +- org.codehaus.jackson:jackson-mapper-asl:jar:1.6.4:compile 
[INFO] | \- org.codehaus.jackson:jackson-core-asl:jar:1.6.4:compile 
[INFO] +- javax.servlet:servlet-api:jar:2.5:provided 
[INFO] +- javax.servlet.jsp:jsp-api:jar:2.1:provided 
[INFO] +- javax.servlet:jstl:jar:1.2:compile 
[INFO] +- junit:junit:jar:4.7:test 
[INFO] \- org.springframework:spring-test:jar:3.0.5.RELEASE:test 
[INFO] --------------------------------------------------------------- 
[INFO] BUILD SUCCESSFUL 
[INFO] --------------------------------------------------------------- 
[INFO] Total time: 1 minute 8 seconds 
[INFO] Finished at: Tue Jan 04 16:53:45 CET 2011 
[INFO] Final Memory: 12M/25M 
[INFO] --------------------------------------------------------------- 

Sie die Gläser herunterladen Jarvana (Typ nur jarvana + den Namen des jar) oder Sie kann den Befehl svn checkout verwenden.

Der Hibernate-Validator: jar: 4.1.0.Final in Jarvana einen Fehler zurückgibt (es gibt keine 4.1.0 Endfassung ist -> nur 4.0.2 Finale
Auch org.codehaus.jackson-Mapper-asl 1.6 .4 konnte nicht gefunden werden - nur 1.6.2 (das gleiche gilt für die jackson-core-asl.) Ich gehe davon aus, dass das gleiche passieren würde, wenn du maven benutzt hättest, um dein Projekt zu bauen.

Nachdem ich alle benötigten enthalten habe Gläser, begann ich den Server im Debug-Modus und das passiert ist:

TIME org.apache.catalina.loader.WebappClassLoader validateJarFile 
INFO: validateJarFile(C:\somePath\mvc-ajax3.0\WEB-INF\lib\jsp-api-2.1.jar) - jar not loaded. 
See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/jsp/JspPage.class 
TIME org.apache.catalina.loader.WebappClassLoader validateJarFile 
INFO: validateJarFile(C:\somePath\mvc-ajax3.0\WEB-INF\lib\servlet-api-2.5.jar) - jar not loaded. 
See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class 

das bedeutet, (glaube ich), dass diese Gläser zweimal gefunden löschen sie getan. der Job für mich. Nähte wie die pom.xml sind für dieses Beispiel nicht gültig.

Es hat zu lange gedauert, bis ich die Gläser manuell heruntergeladen und die gesamte Projektkonfiguration "gekämpft" habe, also denke ich, dass es am besten ist, Maven zu lernen, wenn man mit Spring 3.0 beginnen möchte.

Antwort

8

Führen Sie mvn dependency:tree aus und es werden alle Abhängigkeiten des Projekts aufgelistet.

Referenz:

+0

Dank Sean! Ich habe bis jetzt an dem Thema gearbeitet. Ich habe es geschafft, die Abhängigkeiten zu finden und sie mit Jarvana herunterzuladen (kann über eine Eingabeaufforderung mit dem Befehl svn checkout ausgeführt werden). Für mehr schrieb ich und bearbeite Abschnitt in meiner Frage! – despot

3

Du hast nicht erwähnt, was IDE Sie verwenden. Wenn Sie Eclipse verwenden, installieren Sie das M2Eclipse-Plugin für Maven. Einmal installiert, hat es einen exzellenten Maven pom.xml Editor, der Ihnen viele Dinge zeigen kann ... einschließlich einer interaktiven, rekursiven Abhängigkeitsbaumstruktur.

Sie können einige Videos zu dieser Funktion finden Sie hier:

http://m2eclipse.sonatype.org/overview-of-the-m2eclipse-pom-editor.html

+0

Hi HDave, nette Features - ich habe es überprüft! Aber ich habe Probleme mit dem POM-Editor (denke ich) - überprüfen Sie dies: http://StackOverflow.com/Questions/4604316/Why-doesnt-Commenting-Adependency-in-the-Pom-xml-with- m2eclipse-delete-de-ja. Danke für deine Antwort. – despot