我正在尝试将ProGuard配置为我的Gradle构建脚本的一部分,用于Ubuntu中的Java应用程序,通过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。你可以在库jar参数中看到它。那我理解错了什么?
Could not call ProGuardTask.proguard()
是来自Gradle还是ProGuard。也许可以展示完整的堆栈跟踪。can't find referenced class java.lang.String
听起来像是ProGuard没有正确配置。 - Peter Niederwieser