2014-04-11 19 views
3

具有這種依賴關係部分中我的pom.xml如何從罐子中真正完全排除包裝?

<dependencies> 
    <dependency> 
    <groupId>junit</groupId> 
    <artifactId>junit</artifactId> 
    <version>3.8.1</version> 
    <scope>test</scope> 
    </dependency> 


    <dependency> 
    <groupId>org.apache.cxf</groupId> 
    <artifactId>cxf-rt-frontend-jaxws</artifactId> 
    <version>2.7.1</version> 
    <type>jar</type> 
    <scope>runtime</scope> 
    </dependency> 
    <dependency> 
    <groupId>org.apache.cxf</groupId> 
    <artifactId>cxf-rt-transports-http</artifactId> 
    <version>2.7.1</version> 
    <type>jar</type> 
    <scope>runtime</scope> 
    </dependency> 
    <dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-web</artifactId> 
    <version>3.0.7.RELEASE</version> 
    </dependency> 


    <dependency> 
    <groupId>mysql</groupId> 
    <artifactId>mysql-connector-java</artifactId> 
    <version>5.1.26</version> 
    </dependency> 
    <dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-core</artifactId> 
    <version>4.2.6.Final</version> 
    </dependency> 
    <dependency> 
    <groupId>org.apache.cxf</groupId> 
    <artifactId>cxf-api</artifactId> 
    <version>2.7.1</version> 
    <exclusions> 
     <exclusion> 
     <groupId>org.apache.geronimo.specs</groupId> 
     <artifactId>geronimo-javamail_1.4_spec</artifactId> 
     </exclusion> 
    </exclusions> 
    </dependency> 
    <dependency> 
    <groupId>org.apache.cxf</groupId> 
    <artifactId>cxf-rt-transports-http</artifactId> 
    <version>2.7.1</version> 
    <type>jar</type> 
    </dependency> 

    <dependency> 
    <groupId>javax.servlet</groupId> 
    <artifactId>servlet-api</artifactId> 
    <version>2.5</version> 
    </dependency> 

    <dependency> 
    <groupId>javax.mail</groupId> 
    <artifactId>mail</artifactId> 
    <version>1.4.1</version> 
    </dependency> 
    <dependency> 
    <groupId>javax.activation</groupId> 
    <artifactId>activation</artifactId> 
    <version>1.1.1</version> 
    </dependency> 

</dependencies> 

我預期從構建排除Geronimo的javamail_1.4_spec包,事實上,當我運行mvn dependency:tree,它是沒有在那裏更長時間。

但是,在運行所產生的罐子時,則仍的JarClassLoader抱怨由Geronimo的那些被隱藏的javax /郵件類...

果然,當我檢查通過7-ZIP的罐子,我看到geronimo-javamail_1.4_spec-1.7.1.jar仍然存在(作爲org.apache.cxf的一部分:cxf-api:jar:2.7.1:compile package)。

如何完全排除軟件包?即不僅將它從依賴關係樹中移除,而且還不包括它在所產生的jar中?


添加每下面的評論中onejar相關的XML:

<plugin> 
    <groupId>com.jolira</groupId> 
    <artifactId>onejar-maven-plugin</artifactId> 
    <version>1.4.4</version> 
    <executions> 
    <execution> 
     <configuration> 
     <mainClass>com.corp.dept.proj.myclient</mainClass> 
     <onejarVersion>0.97</onejarVersion> 
     <attachToBuild>true</attachToBuild> 
     <!-- Optional, default is "onejar" --> 
     <classifier>onejar</classifier> 
     </configuration> 
     <goals> 
     <goal>one-jar</goal> 
     </goals> 
    </execution> 
    </executions> 
</plugin> 

添加MVN依賴的輸出範圍&調試選項後,每個答案都規定如下:

C:\Users\withheld\workspace\myclient>mvn dependency:tree -Dscope=runtime -Ddebug=true 
[INFO] Scanning for projects... 
[INFO] Searching repository for plugin with prefix: 'dependency'. 
[INFO] org.apache.maven.plugins: checking for updates from onejar-maven-plugin.googlecode.com 
[INFO] org.codehaus.mojo: checking for updates from onejar-maven-plugin.googlecode.com 
[INFO] ------------------------------------------------------------------------ 
[INFO] Building myclient 
[INFO] task-segment: [dependency:tree] 
[INFO] ------------------------------------------------------------------------ 
Downloading: http://repo1.maven.org/maven2/com/oracle/ojdbc14/14/ojdbc14-14.pom 
[INFO] Unable to find resource 'com.oracle:ojdbc14:pom:14' in repository central (http://repo1.maven.org/maven2) 
[INFO] [dependency:tree {execution: default-cli}] 
[INFO] com.corp.dept.proj:myclient:jar:0.0.6 
[INFO] +- junit:junit:jar:3.8.1:test 
[INFO] +- com.oracle:ojdbc14:jar:14:compile 
[INFO] +- org.apache.cxf:cxf-rt-frontend-jaxws:jar:2.7.1:runtime 
[INFO] | +- xml-resolver:xml-resolver:jar:1.2:runtime 
[INFO] | +- asm:asm:jar:3.3.1:runtime 
[INFO] | +- org.apache.cxf:cxf-rt-bindings-soap:jar:2.7.1:runtime 
[INFO] | | \- org.apache.cxf:cxf-rt-databinding-jaxb:jar:2.7.1:runtime 
[INFO] | +- org.apache.cxf:cxf-rt-bindings-xml:jar:2.7.1:runtime 
[INFO] | +- org.apache.cxf:cxf-rt-frontend-simple:jar:2.7.1:runtime 
[INFO] | \- org.apache.cxf:cxf-rt-ws-addr:jar:2.7.1:runtime 
[INFO] |  \- org.apache.cxf:cxf-rt-ws-policy:jar:2.7.1:runtime 
[INFO] |  \- org.apache.neethi:neethi:jar:3.0.2:runtime 
[INFO] +- org.apache.cxf:cxf-rt-transports-http:jar:2.7.1:compile 
[INFO] | \- org.apache.cxf:cxf-rt-core:jar:2.7.1:compile 
[INFO] |  \- com.sun.xml.bind:jaxb-impl:jar:2.1.13:compile 
[INFO] +- org.springframework:spring-web:jar:3.0.7.RELEASE:compile 
[INFO] | +- aopalliance:aopalliance:jar:1.0:compile 
[INFO] | +- org.springframework:spring-beans:jar:3.0.7.RELEASE:compile 
[INFO] | +- org.springframework:spring-context:jar:3.0.7.RELEASE:compile 
[INFO] | | +- org.springframework:spring-aop:jar:3.0.7.RELEASE:compile 
[INFO] | | +- org.springframework:spring-expression:jar:3.0.7.RELEASE:compile 
[INFO] | | \- org.springframework:spring-asm:jar:3.0.7.RELEASE:compile 
[INFO] | \- org.springframework:spring-core:jar:3.0.7.RELEASE:compile 
[INFO] |  \- commons-logging:commons-logging:jar:1.1.1:compile 
[INFO] +- mysql:mysql-connector-java:jar:5.1.26:compile 
[INFO] +- org.hibernate:hibernate-core:jar:4.2.6.Final:compile 
[INFO] | +- antlr:antlr:jar:2.7.7:compile 
[INFO] | +- org.jboss.logging:jboss-logging:jar:3.1.0.GA:compile 
[INFO] | +- dom4j:dom4j:jar:1.6.1:compile 
[INFO] | +- org.jboss.spec.javax.transaction:jboss-transaction-api_1.1_spec:jar:1.0.1.Final:compile 
[INFO] | +- org.hibernate.javax.persistence:hibernate-jpa-2.0-api:jar:1.0.1.Final:compile 
[INFO] | +- org.hibernate.common:hibernate-commons-annotations:jar:4.0.2.Final:compile 
[INFO] | \- org.javassist:javassist:jar:3.15.0-GA:compile 
[INFO] +- org.apache.cxf:cxf-api:jar:2.7.1:compile 
[INFO] | +- org.codehaus.woodstox:woodstox-core-asl:jar:4.1.4:runtime 
[INFO] | | \- org.codehaus.woodstox:stax2-api:jar:3.1.1:runtime 
[INFO] | +- org.apache.ws.xmlschema:xmlschema-core:jar:2.0.3:compile 
[INFO] | \- wsdl4j:wsdl4j:jar:1.6.2:compile 
[INFO] +- javax.servlet:servlet-api:jar:2.5:compile 
[INFO] +- javax.mail:mail:jar:1.4.1:compile 
[INFO] \- javax.activation:activation:jar:1.1.1:compile 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESSFUL 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 4 seconds 
[INFO] Finished at: Thu Apr 24 11:22:49 EDT 2014 
[INFO] Final Memory: 20M/49M 
[INFO] ------------------------------------------------------------------------ 
+1

怎麼說呢'當屬org.apache.cxf的一部分:CXF-API ...'通過看罐子? – Raghuram

+0

@Raghuram在添加''到pom.xml之前,不是通過查看jar,而是運行'mvn dependency:tree'。樹明確地告訴我geronimo從哪裏來。谷歌搜索這進一步證實,Apache CXF包括這一點(除了一些其他)。 – Withheld

+1

你如何運行jar?你使用Maven插件來構建一個胖罐嗎?你使用'mvn exec'嗎? – rompetroll

回答

5

onejar插件添加了maven運行時範圍內的所有工件,因爲它應該是。

命令mvn dependency:tree似乎沒有正確列出所有運行時依賴關係。可能是一個錯誤,我不知道爲什麼。

幸運的是,通過添加一些參數,您可以列出所有運行時作用域依賴關係。

mvn dependency:tree -Dscope=runtime -Ddebug=true 

這將顯示cxf-rt-core也有geronimo-javamail的依賴。所以,你的解決方案是明確地將核心jar與排除在你的依賴關係之外。

<dependency> 
     <groupId>org.apache.cxf</groupId> 
     <artifactId>cxf-rt-core</artifactId> 
     <version>2.7.1</version> 
     <exclusions> 
      <exclusion> 
       <groupId>org.apache.geronimo.specs</groupId> 
       <artifactId>geronimo-javamail_1.4_spec</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 
+0

感謝+1對'mvn dependency:tree'上的'-Dscope = runtime -Ddebug = true'提示。出於某種原因,我沒有看到包含geronimo人的'cxf-rt-core',而只是'com.sun.xml.bind:jaxb-impl'。不過,我會繼續試驗你的建議並回報。 – Withheld

+0

我也添加了mvn樹的輸出到OP。 – Withheld

+0

令人難以置信。你的技巧像魔術一樣工作(儘管沒有在我的'mvn dependency:tree -Dscope = runtime -Ddebug = true'輸出中顯示出來)。太感謝了! – Withheld