2012-12-31 54 views
1

我在我的POM中使用了Apache Poi版本3.8。但由於某些內部依賴性,它仍然(隨着(可能))下載poi-3.2和poi-3.8。對我來說,奇怪的行爲是我的項目使用poi-3.2,即使我在POM中提到了3.8版本。我也一樣谷歌搜索了很多,但發現自己不吉利。 這是我的POM項:Maven Dependancy引用舊的Poi版本

ClassLoader classloader = 
       org.apache.poi.poifs.filesystem.POIFSFileSystem.class.getClassLoader(); 
      URL res = classloader.getResource(
         "org/apache/poi/poifs/filesystem/POIFSFileSystem.class"); 
      String path = res.getPath(); 
      System.out.println("Core POI came from " + path); 

此打印:

核心POI從 來到

<dependency> 
    <groupId>org.apache.poi</groupId> 
    <artifactId>poi</artifactId> 
    <version>3.8</version> 
    <type>jar</type> 
</dependency> 

我已經通過代碼使用檢查POI罐子我的項目在類路徑文件:/ d:/Software/Softwares/apache-tomcat-6.0.33/webapps/scd-web/WEB-INF/lib/poi-3.2.jar /org/apache/poi/poifs/filesystem/POIFSFileSystem.class

在相同的文件夾中有一個poi-3.8.jar,但是類路徑拾取3.2。

我的問題是: 我應該怎麼做,以使我的項目使用POI-3.8.jar代替POI-3.2.jar。

很多感謝!

編輯: 輸出MVN依賴:樹

[INFO]大廈SCD-常見[INFO]任務段:[依賴性:樹] [INFO] ----- -------------------------------------------------- ----------------- [警告]下載xmlbeans時:xmlbeans:2.3.0這個神器 已被重新定位到org.apache.xmlbeans:xmlbeans:2.3.0。

[INFO] [dependency:tree] [INFO] com.idc:scd-common:jar:4.2.0.5 [INFO] + - org.springframework:spring-webmvc:jar:2.5.6:compile [ INFO] | + - commons-logging:commons-logging:jar:1.1.1:compile [INFO] | + - org.springframework:spring-beans:jar:2.5.6:compile [INFO] | + - org.springframework:spring-context-support:jar:2.5.6:compile [INFO] | - org.springframework:spring-web:jar:2.5.6:compile [INFO] + - com.idc.worldwide.keystones:service-single-signon-dynamo-api:jar:1.0:c ompile [INFO ] + - com.idc.worldwide.keystones:service-single-signon-dynamo-database-impl :jar:1.0.3:compile [INFO] | + - org.apache:commons-dbcp:jar:1.2.2:compile [INFO] | + - org.apache:commons-pool:jar:1.4:compile [INFO] | - com.idc.worldwide.webchannel:sage-core:jar:3.2.0.001:compile [INFO] | + - com.idc.webchannel.legacy.sage-dependencies:aspose-slides:jar:1。 0:編譯[INFO] | + - com.servlets:cos:jar:09May2002:compile [INFO] | + - com.sun:jai_codec:jar:1.1.3:compile [INFO] | + - com.sun:jai_core:jar:1.1.3:compile [INFO] | + - com.verity:k2:jar:5.00.3177.0:compile [INFO] | + - org.apache:poi:jar:3.2:compile [INFO] | + - org.apache:poi_contrib:jar:3.2:compile [INFO] | + - org.apache:poi_scratchpad:jar:3.2:compile [INFO] | - org.springframework:spring:jar:2.5.6:compile [INFO] + - org.springframework:spring-core:jar:3.0.5.RELEASE:compile [INFO] | - org。springframework的:彈簧ASM:罐子:3.0.5.RELEASE:編譯[INFO] + - org.springframework:彈簧AOP:罐子:3.0.5.RELEASE:編譯

+0

「mvn依賴:樹」的輸出是什麼? – bowmore

+0

@bowmore:它.. [INFO]掃描的項目... [INFO] Reactor生成順序: [INFO]服務合同數據庫 [INFO] SCD-共同 [INFO] SCD-WEB [INFO ]搜索知識庫的插件機智 下載: – manurajhada

+0

你應該把這個輸出的問題,而不是評論:) – bowmore

回答

2

貌似

org.apache:poi:jar:3.2 

com.idc.worldwide.keystones:service-single-signon-dynamo-database-impl 

編譯依賴關係(雖然我覺得你可能會削減一些)

org.apache.poi:poi:jar:3.8 

不是依賴(即t不在依賴樹中)。

確保您的<dependency>條目在<dependencies>標記內。

+0

謝謝@bowmore,'org.apache.poi:poi:jar:3。8'也是依賴的,正如我所提到的,整個輸出太長了,無法粘貼到這裏。但我看到3.8也在那裏。 – manurajhada

+2

試圖分析部分輸出只是沒有好處。如果你可以在別處上傳它(pastebin?)並提供一個鏈接,那肯定會有所幫助 – bowmore

0

也許你混合正常的依賴與插件依賴關係,請參見here(不太合適的答案)。

如果您有子項目,請在根POM中使用依賴項管理。

2

運行

mvn dependency:tree 

檢查哪些庫具有傳遞性依賴於POI 3.2。你可以在你的pom中排除它。

<dependency> 
    <groupId>sample.group</groupId> 
    <artifactId>sample-artifactB</artifactId> 
    <version>1</version> 
    <exclusions> 
    <groupId>org.apache.poi</groupId> 
<artifactId>poi</artifactId> 
    </exclusion> 
    </exclusions> 
</dependency> 
2

various mvn command,以幫助解決這一問題:

mvn dependency:analyze-dep-mgt

,將打印的依賴解決的細節。

mvn dependency:tree

將打印的依賴關係樹(非常有幫助,看看你的依賴的依賴)

mvn help:effective-pom

將打印從您的POM層次的合併而產生的POM。

如果您在maven中未找到任何對poi-3.2的引用,則可以在IDE中查看您的類路徑。你添加任何jar旁邊的maven?

使用這些命令的結果編輯您的問題可能對我們有幫助。