Как предотвратить удаление 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 ответ:
После подачи сообщения об ошибке , автор Proguard подтвердил, что нам нужно рассматривать
module-info
как просто еще один класс и добавить правило, чтобы сохранить его, например:
-keep class module-info
И, возможно, используя
-keepattributes Module*
В моем случае я действительно пробовал его перед публикацией вопроса, но он не работал для меня в проекте, с которым я его использовал (я получил
NullPointerException
, Когда я попробовал его, более подробно в отчете об ошибке)После ответа автора я попробовал его на более простом проекте и правило "держать" выше работало отлично, так что это означало, что что-то специфическое для моего первого проекта вызывало проблему.
Я пока обошел проблему в этом проекте, используя gradle для копирования
module-info.class
из незамутненной банки в запутанную. Это не очень красиво, но это работает.Надеюсь, что это поможет любому в той же ситуации.