如何让Apache Commons Zip-- Zip64工作

时间:2012-07-22 19:22:13

标签: java zip apache-commons

问题: 我一直在努力使Apache Commons Zip 64功能正常工作,特别是ZipArchiveOutputStream.setUseZip64()方法。当我尝试使用此方法时,我得到一个“方法setUseZip64(Zip64Mode)未定义ZipArchiveOutputStream类型”错误。为什么会发生这种错误?

我尝试过什么 我花了很多时间在这上面。我将外部JAR文件添加(并验证)到项目中。从我在Eclipse中看到的,当我尝试实例化ZipArchiveOutputStream时,奇怪的是,对象的签名变为:

  

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

请注意重复的签名为

  

ZipArchiveOutputStream.ZipArchiveOutputStream   

或者,我手动将源代码添加到实际的项目构建中。当我手动将源代码添加到项目ODDLY时,该方法有效 - 也就是说,我可以调用

  

zipout.setUseZip64(Zip64Mode.Always)

没有问题(并且签名似乎不像上面那样重复)。

理想情况下,我只想引用外部Apache JAR文件而不是内部添加源代码。那么,为什么会发生这种错误?

注意:我还将自己编译的Apache Source版本作为单独的JAR构建,这也表现出所描述的错误。因此,只有手动将代码添加到实际的Eclipse Project中似乎有所帮助。

注意:我确保手动添加的版本与外部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 Apache Commons Compress(版本1.3和更新版本1.4)

1 个答案:

答案 0 :(得分:0)

经过几个月的解决这个问题后,解决方案偶然出现了。

如果一个人进口Apache Commons Zip和Mahout Distribution 0.5,就会出现问题。

具体来说,

存在细微的导入冲突
mahout-examples-0.5.jar 
mahout-examples-0.5-job.jar 

显然也使用旧版本的Apache Commons。导入命令导致了一个微妙的冲突,导致更新的Apache Commons功能无效 - 除非我手动将Commons Compress代码(仅用于测试)导入到项目中 - 有效地颠覆了与Mahout的真实冲突。