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/服务有什么特别之处。许多其他目录的处理都没有错误。

更新:

刚刚发现 unzip 有一个“详细”标志,它揭示了这种奇怪:

   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 回答