Дроссели jwrapper в каталоге META-INF

Попытка 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 имеет флаг "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/. Однако я не знаю почему или как.

1 ответ

Решение

Похоже, это не связано с jwrapper. Инструмент clojure uberjar, lein, иногда создает банку, несовместимую с pack200. Это происходит только с определенными jar-файлами в апстриме и некоторыми версиями jdk (1.7)

Обходной путь - разархивировать / повторно заархивировать Clojure Uberjar, который исправляет структуру каталогов. Это должно быть сделано до вызова jwrapper.

Другие вопросы по тегам