【发布时间】:2012-01-13 03:07:14
【问题描述】:
我正在将 proguard 与 spring mvc 应用程序和 maven 一起使用。
我的 pom.xml 的构建部分如下所示:
<build>
<finalName>myapp</finalName>
<plugins>
<plugin>
<groupId>com.pyx4me</groupId>
<artifactId>proguard-maven-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>proguard</goal>
</goals>
</execution>
</executions>
<configuration>
<obfuscate>true</obfuscate>
<!--<options>-->
<!--<option>-keep public class</option>-->
<!--</options>-->
<injar>${project.build.finalName}</injar>
<injar>${project.build.finalName}</injar>
<inFilter>com.myapp.*</inFilter>
</configuration>
</plugin>
</plugins>
我也试过了:
<injar>${project.build.finalName}.war</injar>
当我跑步时:
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]
它似乎正确地拿起了我的罐子,就像之前显示的消息一样:
[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 新手)在执行 mvn clean install 时会产生一个 myapp.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 更改为:
<configuration>
<obfuscate>true</obfuscate>
<injar>${project.build.finalName}/WEB-INF/classes/</injar>
<inFilter>com/myapp/**</inFilter>
</configuration>
【问题讨论】:
-
在下面查看我的答案和解决方法,ProGuard 不支持此特定配置
标签: java spring maven obfuscation proguard