0

プロジェクトで jwrapper を試すと、次のように失敗します。

**********************************
*          BUILD FAILED          *
**********************************
** Reason: (see stacktrace below)

java.lang.IllegalArgumentException: Non-empty directory: META-INF/services
        at com.sun.java.util.jar.pack.PackerImpl$DoPack.readFile(PackerImpl.java:546)
        at com.sun.java.util.jar.pack.PackerImpl$DoPack.run(PackerImpl.java:492)
        at com.sun.java.util.jar.pack.PackerImpl.pack(PackerImpl.java:99)
        at jwrapper.pack200.Pack200Compressor.compressFileToOutputStream(Pack200Compressor.java:133)
        at jwrapper.archive.Archive.addFileToStream(Archive.java:411)

アプリケーションjarにはこれがあります:

 1  12-03-2014 16:45   META-INF/services/
13  12-03-2014 16:45   META-INF/services/java.sql.Driver

問題は何でしょうか?

pack200 をスタンドアロンで実行すると、同じエラーがスローされます。META-INF/services の何が特別なのかわかりません。他の多くのディレクトリはエラーなしで処理されます。

アップデート:

unzip に「verbose」フラグがあることがわかりました。これは、この奇妙な点を明らかにしています。

   0  Stored        0   0% 02-22-2013 13:53 00000000  META-INF/maven/net.mikera/mathz/
   1  Defl:N        3 -200% 12-03-2014 16:45 32d70693  META-INF/services/

META-INF/services/ を除くすべてのディレクトリは「保存済み」とマークされています。ただし、理由や方法はわかりません。

4

1 に答える 1

0

これは jwrapper とは無関係のようです。clojure の uberjar ツールである lein は、pack200 と互換性のない jar をビルドすることがあります。特定のアップストリーム jar と特定の jdk バージョン (1.7) でのみ発生します。

回避策は、ディレクトリ構造を修正する clojure uberjar を解凍/再圧縮することです。これは、jwrapper を呼び出す前に行う必要があります。

于 2014-12-05T18:07:38.037 に答える