0

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

我尝试了什么我 花了很长时间在这上面。我将外部 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 Apache Commons Compress(版本 1.3 和更新的 1.4)

4

1 回答 1

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 的真正冲突。

于 2012-09-20T15:10:06.733 回答