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所以我有这样的注释:

  1. @Autowired
  2. @服务
  3. @Repository
  4. @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配置,我想这不是必需的。