jwrapper在META-INF目录上窒息

时间:2014-12-04 05:31:59

标签: java jwrapper

在项目上尝试使用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 /服务有什么特别之处。处理许多其他目录时没有错误。

更新

刚刚发现解压缩有一个'详细'旗帜,揭示了这种古怪:

   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 /外,所有目录都标有' Stored'。但是,我不知道为什么或如何。

1 个答案:

答案 0 :(得分:0)

这似乎与jwrapper无关。 clojure uberjar工具lein有时会构建一个与pack200不兼容的jar。它只发生在某些上游jar和某些jdk版本(1.7)。

解决方法是解压缩/重新压缩clojure uberjar,它修复了目录结构。这应该在调用jwrapper之前完成。