2012-12-12 36 views
9

Tôi nhận được phiên bản phụ thuộc không mong muốn (1.5.8) khi tôi sử dụng plugin lắp ráp, nhưng không có nơi nào khác. Trong pom của tôi, tôi có:lắp ráp maven kéo phụ thuộc sai

<dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-log4j12</artifactId> 
     <version>1.6.0</version> 
    </dependency> 

Khi tôi chạy dependency:tree hoặc dependency:list, tôi thấy đúng phiên bản và chỉ có phiên bản chính xác. Khi tôi kiểm tra trong Eclipse, tôi chỉ thấy phiên bản chính xác.

Trong assembly.xml của tôi, tôi có:

<dependencySets> 
    <dependencySet> 
     <outputDirectory>lib</outputDirectory> 
    </dependencySet> 
</dependencySets> 

Trong zip kết quả, tôi nhận được slf4j-log4j12-1.5.8.jar. Không biết nó đến từ đâu. Bất kỳ giúp đỡ?

Sử dụng maven 3.0.4.

Trả lời

10

này là do một 'xấu' phiên bản lắp ráp plugin (2.2-beta-5). Tệp pom.xml của tôi không chỉ định phiên bản plugin. Khi tôi đánh dấu rõ ràng nó là 2.4 (hoặc phiên bản mới nhất khi bạn đọc cái này!), Plugin đã kéo phụ thuộc chính xác.

Bài học kinh nghiệm - Nếu bạn nhận được cảnh báo sau đây trong xây dựng của bạn:

[WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-whatever-plugin is missing 
It is highly recommended to fix these problems because they threaten the stability of your build. 

.. sửa chữa nó!

+1

Cảm ơn, chuyển từ 2.2-beta-5 sang 2.4 đã sửa lỗi này cho tôi :-) –

+0

Sau nhiều giờ đập đầu cho vấn đề chính xác mà câu hỏi này nói đến, đây chính xác là câu trả lời tôi cần. Cảm ơn bạn! – Stewart

4
  1. Bạn có thể cố gắng để xóa các JAR xấu (slf4j-log4j12-1.5.8.jar) từ kho maven của bạn và thêm điều đúng đó (slf4j-log4j12-1.6.0.jar). Sau đó chạy bản dựng của bạn bằng công tắc --offline. Trong thời điểm đó maven cố gắng để có được JAR sai, xây dựng sẽ thất bại và maven sẽ cho bạn thấy từ những gì phụ thuộc transitive nó đang cố gắng để có được nó. Sau đó, bạn loại trừ nó ra khỏi phụ thuộc transistive với điều này:

    <exclusions> 
        <exclusion> 
        <artifactId>slf4j-api</artifactId> 
        <groupId>slf4j-log4j12</groupId> 
        </exclusion> 
    </exclusions> 
    
  2. Kiểm tra nếu nó JAR mà bạn đã có groupId đúng. Một số người tạo các bản sao JAR phổ biến cho mục đích đặc biệt ngu ngốc và ác có thể gây nhầm lẫn cho maven. Đặc biệt, hãy kiểm tra nếu bạn không nhận được org.jboss.resteasy:slf4j-log4j12 thay thế. Bạn có thể cấm phụ thuộc không mong muốn bằng cách sử dụng maven-enforcer-plugin, như thế này:

    <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-enforcer-plugin</artifactId> 
        <version>1.0</version> 
        <executions> 
        <execution> 
         <id>enforce-banned-dependencies</id> 
         <goals> 
         <goal>enforce</goal> 
         </goals> 
         <configuration> 
         <rules> 
          <bannedDependencies> 
          <excludes> 
           <exclude>org.slf4j:slf4j-log4j12:1.5.8</exclude> <!-- Wrong version, dude! --> 
           <exclude>commons-logging:*</exclude> <!-- Worst, stupidest, lamest logging framework ever! --> 
           <exclude>org.jboss.resteasy:slf4j-simple</exclude> <!-- Evil JAR duplication. --> 
           <exclude>org.jboss.resteasy:slf4j-api</exclude> <!-- Evil JAR duplication. --> 
           <exclude>org.jboss.resteasy:slf4j-log4j12</exclude> <!-- Evil JAR duplication. --> 
           <exclude>org.jboss.resteasy:jackson-core-asl</exclude> <!-- Evil JAR duplication. --> 
           <exclude>org.jboss.resteasy:jackson-mapper-asl</exclude> <!-- Evil JAR duplication. --> 
           <exclude>org.jboss.resteasy:jackson-core-lgpl</exclude> <!-- Evil JAR duplication. --> 
           <exclude>org.jboss.resteasy:jackson-mapper-lgpl</exclude> <!-- Evil JAR duplication. --> 
           <exclude>org.codehaus.jackson:jackson-core-lgpl</exclude> <!-- Two distinct packages for the exact same thing always creates conflicts. We want the ASL one. --> 
           <exclude>org.codehaus.jackson:jackson-mapper-lgpl</exclude> <!-- Two distinct packages for the exact same thing always creates conflicts. We want the ASL one. --> 
           <exclude>velocity-tools:velocity-tools</exclude> <!-- Was renamed. --> 
           <exclude>velocity:velocity</exclude> <!-- Was renamed. --> 
           <exclude>struts:struts</exclude> <!-- Was renamed. --> 
           <exclude>javassist:javassist</exclude> <!-- Was renamed. --> 
           <exclude>axis:*</exclude> <!-- Was renamed to org.apache.axis:* and wsdl4j:wsdl4j . --> 
           <exclude>commons-beanutils:commons-beanutils-core</exclude> <!-- Redundant package. --> 
           <exclude>xpp3:xpp3_min</exclude> <!-- Redundant package. --> 
           <exclude>xml-apis:xml-apis:2.0.0</exclude> <!-- Bad package, for some strange reason 2.0.x is inferior to 1.4.x. --> 
           <exclude>xml-apis:xml-apis:2.0.2</exclude> <!-- Bad package, for some strange reason 2.0.x is inferior to 1.4.x. --> 
           <exclude>quartz:quartz</exclude> <!-- Was renamed. --> 
          </excludes> 
          </bannedDependencies> 
         </rules> 
         </configuration> 
        </execution> 
        </executions> 
    </plugin> 
    
+1

Hoặc phụ thuộc mvn chạy đơn giản: cây để tìm phụ thuộc chuyển tiếp và loại trừ bình như đã đề cập ở trên. – om39a