Proguard说它找不到任何课程
我正在使用带有spring mvc应用程序和maven的proguard。
我的pom.xml的构建部分如下所示:
myapp com.pyx4me proguard-maven-plugin package proguard true <!----> <!---keep public class--> <!----> ${project.build.finalName} ${project.build.finalName} com.myapp.*
我也尝试过:
${project.build.finalName}.war
当我跑:
mvn clean install
构建失败消息:
[proguard] Reading program war [/Users/me/dev/git/myproject/myapp/target/myapp.war] (filtered) [proguard] Error: The input doesn't contain any classes. Did you specify the proper '-injars' options? ERROR] Failed to execute goal com.pyx4me:proguard-maven-plugin:2.0.4:proguard (default) on project myapp: Obfuscation failed (result=1) -> [Help 1]
它似乎已经正确地拿起我的jar作为显示之前的消息:
[INFO] --- proguard-maven-plugin:2.0.4:proguard (default) @ myapp --- [INFO] execute ProGuard [-injars, '/Users/me/dev/gitserver/myproject/myapp/target/myapp.war'(!META-INF/maven/**,com.myapp.*), -outjars, '/Users/me/dev/git/myproject/myapp/target/myapp_pg.war', -libraryjars, ....
另外,您建议我使用哪些选项? 这是一个spring的mvc所以我有这样的注释:
- @Autowired
- @服务
- @Repository
- @Controller
因此,任何这些类/字段都不应该重命名我想象。
(我的目标只是让那些反编译的人头疼,这样他们就不能反编译和使用代码。混淆会让他们使用它,但他们将无法维护代码库,除非他们重新写它。我没有任何花哨的算法,所以在这方面我没有什么可隐瞒的。)
更新
让我在这里说清楚,我的spring mvc使用maven出于某种原因(我是maven的新手)在进行mvn clean install时会生成myapp.war文件和爆炸的war myapp /(这就是我要部署的内容)生产,而不是myapp.war文件)
我的myapp文件夹有:
/target/myapp/ /target/myapp/meta-inf (empty folder) /target/myapp/web-inf /target/myapp/web-inf/classes (com.myapp. ...) /target/myapp/web-inf/lib/ /target/myapp/web-inf/ web.xml, application.xml (for spring) /target/myapp/web-inf/views/
那么proguard应该在/ target / myapp / web-inf / classes文件夹中混淆吗? 我怎么告诉它这样做?
更新2
我现在得到这个:
好的,我没有得到:未能执行目标… proguard ..无法重命名/ Users / me / dev / git / project1 / myapp / target / myapp / web-inf / classes(请参阅我的更新部分了解更多内容我改变了我的pom.xml)
我改变了我的pom.xml:
true ${project.build.finalName}/WEB-INF/classes/ com/myapp/**
ProGuardfilter处理文件名,因此
.....(!META-INF/maven/**,com.myapp.*)
可能不会匹配任何类文件。 你可能想要
.....(!META-INF/maven/**,com/myapp/**)
请参阅ProGuard手册>使用>文件filter
你可以张贴整个pom吗?
通常,Maven编译为/ target / classes(即使对于WAR文件),WAR插件在包阶段之前复制到web-inf / classes。 您不应该使用Maven手动将类编译到web-inf / lib。
编辑:好的,这需要相当多的研究,但我找到了答案。 首先, 根据ProGuard文档 ,您的war项目中不应该包含任何类:
值得注意的是,战争中WEB-INF / classes目录中的类文件应打包在jar中并放入WEB-INF / lib目录中
您需要重构项目,以便您的Web类构建在一个单独的jar中。 构建该jar项目后,必须将其作为war项目中的依赖项添加。
一旦我创建了该设置,我就能够成功构建具有以下配置的war项目:
com.pyx4me proguard-maven-plugin package proguard com/example/** ${java.home}/lib/rt.jar ${java.home}/lib/jsse.jar
请注意“com.example.echo.EchoServlet”。 由于progaurd将更改我的类的名称,我必须“保留”这个servlet名称,以便我可以在WAR项目的web.xml中引用它。 如果您使用基于注释的servlet配置,我想这不是必需的。