2012-07-22 54 views
0

問題: 我一直在努力獲得Apache Commons Zip 64的功能,特別是ZipArchiveOutputStream.setUseZip64()方法。當我試圖用這個方法,我得到一個「的方法setUseZip64(Zip64Mode)是未定義的類型ZipArchiveOutputStream」的錯誤。爲什麼會發生這個錯誤?如何獲得Apache Commons Zip - Zip64工作

我試過了什麼 我在這方面花了相當一段時間。我將外部JAR文件添加(並驗證)到項目中。從我在Eclipse中看到,當我嘗試實例化一個ZipArchiveOutputStream,奇怪的是,物體的簽名變成了:

org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream.ZipArchiveOutputStream

注意重複簽名

ZipArchiveOutputStream.ZipArchiveOutputStream 。

可替換地,我手動添加的源代碼的實際項目構建。當我的源代碼手動添加到項目中,奇怪的是,該方法的工作原理 - 也就是說,我可以調用

zipout.setUseZip64(Zip64Mode.Always)

沒有問題(和簽名似乎不像上面那樣重複)。

理想情況下,我只是想引用外部Apache的JAR文件,而不是在內部添加源。因此,爲什麼會發生這種錯誤?

注:我還內置Apache源代碼是我自己編譯的版本作爲一個單獨的JAR,這也顯示出描述的錯誤。因此,只有代碼,以實際Eclipse項目的手動添加似乎幫助。

注:我確信,沒有手動添加的版本和外部JAR基準之間的衝突。

代碼示例

import org.apache.commons.compress.*; 
import org.apache.commons.compress.archivers.zip.*; 
... 
ZipArchiveOutputStream zipout = 
    new ZipArchiveOutputStream(new FileOutputStream(filenameandpath)); 
zipout.setUseZip64(Zip64Mode.Always) ; // ERROR HERE The method setUseZip64(Zip64Mode) 
             // is undefined for the type 
             // ZipArchiveOutputStream 

配置 的Eclipse 3.7(4.2) 的Java 1.6 阿帕奇百科全書壓縮(1.3版本及更高版本1.4)

回答

0

解決這個問題的幾個月後問題,解決方案是偶然發生的。

問題出現,如果一個進口BOTH阿帕奇百科全書ZIP和Mahout的分配0.5。

具體來說,在

mahout-examples-0.5.jar 
mahout-examples-0.5-job.jar 

一個微妙的進口衝突,顯然也使用Apache下議院的舊版本。導入順序導致了一個微妙的衝突,使得最近的Apache Commons功能無效 - 除了手動將Commons Compress代碼(僅用於測試)導入到項目中時 - 有效地顛覆了與Mahout的真正衝突。

相關問題