2011-01-04 45 views
6

Tôi rất quan tâm đến cách tôi có thể tìm ra các lọ là những phụ thuộc trong pom.xml của maven phụ thuộc vào.Làm thế nào để tìm ra các lọ mà các phụ thuộc trong pom.xml của maven phụ thuộc vào?

Tôi đã quen với việc tự thêm thư viện (jars) vào dự án ứng dụng web của mình. Tôi đi qua nhu cầu này khi tôi đã cố gắng để cấu hình mùa xuân 3,0 mẫu. Tôi thực sự không thích rằng mọi thứ phải đi qua con quạ với mùa xuân 3.0.x. Tại thời điểm này có vẻ như tôi không thể đào sâu hơn trong mê cung phụ thuộc của con quạ và học nó trông giống như một điều phải. Nhưng tôi thực sự sẽ đánh giá cao nếu ai đó có thể cho tôi biết cách tôi có thể tìm hiểu thông tin này.

Ví dụ, đối với tệp pom.xml sau, tôi muốn biết phụ thuộc với bối cảnh mùa xuân artifactId phụ thuộc vào điều gì. (Tôi có thể thấy rằng nó phụ thuộc vào việc ghi nhật ký, vì người sáng tạo mẫu không bao gồm nó - muốn sử dụng slf4j thay vì ghi nhật ký.). Tôi muốn tìm ra phần còn lại của sự phụ thuộc cho sự phụ thuộc với bối cảnh mùa xuân artifactId, và tương tự cho phần còn lại của sự phụ thuộc! Tôi có thể làm cái này như thế nào?

<?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> 

Kind Regards,
bạo chúa

EDIT (một số theo dõi câu trả lời được đưa ra bởi Sean):
1) Tải maven (Tôi đã tải về phiên bản 2.2.1) và làm theo hướng dẫn cài đặt được cung cấp ở đó.
2) Hơn dấu nhắc lệnh mở và chuyển đến thư mục của pom.xml
3) Thực hiện lệnh "mvn dependency: tree" như đã thông báo. (Tôi đã thử sử dụng -DoutputFile = "somePath" hoặc -Dinclude = spring-context -> nó không được viết trong tệp được trình bày trong đường dẫn và nó đã chọn tất cả các phụ thuộc thay vì bối cảnh mùa xuân - bất kể lệnh chung sẽ đủ). Chờ một thời gian để hệ thống tải tất cả thông tin cần thiết và cuối cùng bạn sẽ nhận được một cái gì đó như thế này:

[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] --------------------------------------------------------------- 

Bạn có thể tải các lọ bằng Jarvana (chỉ cần gõ jarvana + tên của jar) hoặc bạn có thể sử dụng lệnh svn checkout.

Trình xác nhận hợp lệ ngủ đông: jar: 4.1.0.Thư trong Jarvana trả về lỗi (không có phiên bản 4.1.0 Final -> chỉ 4.0.2 Final
Cũng org.codehaus.jackson-mapper-asl 1.6 .4 không thể tìm thấy - chỉ 1.6.2 (tương tự với jackson-core-asl) Tôi giả sử rằng điều tương tự sẽ xảy ra nếu bạn sử dụng maven để xây dựng dự án của bạn

Sau khi tôi bao gồm tất cả những gì cần thiết lọ, tôi đã khởi động máy chủ ở chế độ gỡ lỗi và điều này đã xảy ra:

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 

Điều này có nghĩa (tôi nghĩ) rằng các lọ đó được tìm thấy hai lần. công việc cho tôi. Các đường nối như tệp pom.xml không hợp lệ đối với mẫu này. Mất quá nhiều thời gian để tôi tải xuống các lọ bằng tay và để "chiến đấu" tất cả các cấu hình dự án, vì vậy tôi đoán tốt nhất là tìm hiểu một số Maven nếu bạn đang cố gắng bắt đầu với Spring 3.0.

Trả lời

8

Thực hiện mvn dependency:tree và nó sẽ liệt kê tất cả các phụ thuộc của dự án.

tham khảo:

+0

Cảm ơn Sean! Tôi đã làm việc về vấn đề này cho đến bây giờ. Tôi quản lý để tìm các phụ thuộc và tải chúng bằng cách sử dụng jarvana (có thể được thực hiện thông qua một dấu nhắc lệnh sử dụng lệnh svn checkout). Để biết thêm tôi đã viết và chỉnh sửa phần trong câu hỏi của tôi! – despot

3

Bạn đã không đề cập đến những gì IDE bạn đang sử dụng. Nếu bạn đang sử dụng Eclipse thì hãy cài đặt plugin M2Eclipse cho Maven. Sau khi cài đặt nó có một trình biên tập pom.xml Maven tuyệt vời có thể hiển thị cho bạn nhiều thứ ... bao gồm một cây tương tác, đệ quy, phụ thuộc.

Bạn có thể thấy một số video về tính năng này ở đây:

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

+0

Xin chào HDave, các tính năng hay - Tôi đã kiểm tra! Nhưng tôi đã gặp vấn đề với trình soạn thảo POM (tôi nghĩ) - hãy kiểm tra điều này: http://stackoverflow.com/questions/4604316/why-doesnt-commenting-a-dependency-in-the-pom-xml-with- m2eclipse-xóa-the-ja. Cảm ơn câu trả lời của bạn. – despot

Các vấn đề liên quan