Как предотвратить удаление proguard «module-info.class» из выходного файла jar? - PullRequest
0 голосов
/ 06 мая 2018

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

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

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

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

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

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

1 Ответ

0 голосов
/ 26 мая 2018

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

-keep class module-info

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

-keepattributes Module*

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

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

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

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

...