0

質問: Apache Commons Zip 64 機能、特に ZipArchiveOutputStream.setUseZip64() メソッドを機能させるのに苦労しています。このメソッドを使用しようとすると、「メソッド setUseZip64(Zip64Mode) はタイプ ZipArchiveOutputStream に対して未定義です」というエラーが表示されます。このエラーが発生するのはなぜですか?

私が試し たこと 私はこれにかなりの時間を費やしました。外部 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 に答える