Я пытаюсь настроить ProGuard как часть моих сценариев сборки Gradle для java-приложения в Ubuntu, доступ к которому осуществляется через bash, но я не могу понять это правильно. Я никогда раньше не использовал ни одну из этих технологий. Используя Руководство по ProGuard, я написал следующую задачу, которую сейчас вызываю уже существующий файл jar, пока я пытаюсь что-то сделать.
task obfuscate(type: proguard.gradle.ProGuardTask) {
injars 'build/libs/myapplication.jar'
outjars 'build/libs/myapplication_out.jar'
libraryjars '<java.home>/lib/rt.jar'
printmapping 'myapplication.map'
keep 'public class mypackage.MyMainClass { \
public static void main(java.lang.String[]); \
}'
}
Я получаю много строк с указанием отсутствующих встроенных файлов библиотеки Java, таких как:
Warning: myclasses: can't find referenced class java.lang.String
Внизу списка я также вижу:
Could not call ProGuardTask.proguard()
Если я проверю свой выходной каталог, я увижу, что он создал структуру каталогов, но не файл jar, и это то, что я вижу, если я запускаю свою задачу gradle с трассировкой стека:
Caused by: org.gradle.api.GradleException: Could not call ProGuardTask.proguard() on task
Я просмотрел страницу устранения неполадок proguard, и там было сказано, что я должен убедиться, что я указываю библиотеку времени выполнения моей платформы, а для JSE это lib/rt.jar. Вы можете увидеть это в аргументе библиотечных банок. Что я неправильно понял?
Could not call ProGuardTask.proguard()
от Gradle или ProGuard. Возможно, покажите полную трассировку стека.can't find referenced class java.lang.String
похоже, что ProGuard настроен неправильно. - person Peter Niederwieser   schedule 02.04.2014