Как предотвратить удаление proguard " module-info.класс " из выходной банки?


Я обновляю настольное приложение Java до JDK10 и должен использовать модули для использования javapackager для создания собственного пакета.

Все работает отлично, пока я не добавил шаг обфускации с помощью Proguard (6.0.2). Как только я включил obfuscation (используя рабочий файл конфигурации proguard из проекта module-info.class из выходного JAR, что не позволяет javapackager найти модуль.

Согласно документации Proguard для параметр injars

По умолчанию все неклассовые файлы будут скопированы без изменений.

Проблема здесь в том, что module-info.class - это файл "класса" (хотя и странный). Правила "keep" зависят от имен классов, поэтому я не думаю, что есть какое-либо правило, которое я могу использовать, чтобы предотвратить это удаление.

Как я могу заставить Proguard сохранить файл module-info.class?

1 3

1 ответ:

После подачи сообщения об ошибке , автор Proguard подтвердил, что нам нужно рассматривать module-info как просто еще один класс и добавить правило, чтобы сохранить его, например:

-keep class module-info

И, возможно, используя

-keepattributes Module*

В моем случае я действительно пробовал его перед публикацией вопроса, но он не работал для меня в проекте, с которым я его использовал (я получил NullPointerException, Когда я попробовал его, более подробно в отчете об ошибке)

После ответа автора я попробовал его на более простом проекте и правило "держать" выше работало отлично, так что это означало, что что-то специфическое для моего первого проекта вызывало проблему.

Я пока обошел проблему в этом проекте, используя gradle для копирования module-info.class из незамутненной банки в запутанную. Это не очень красиво, но это работает.

Надеюсь, что это поможет любому в той же ситуации.