我正在使用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]
似乎它已经正确获取了我的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 @Service @Repository @Controller 因此,这些类/字段中的任何一个都不应该被重命名。
(我的目标只是让反编译变得困难,使得他们不能只是反编译并使用代码。混淆会让他们使用它,但是除非他们重新编写代码,否则他们将无法维护代码库。我没有任何花哨的算法,所以在这方面我没有什么需要隐藏的。)
更新
让我在这里清楚一下,我的Spring MVC在使用Maven时,进行mvn clean install会生成一个myapp.war文件和一个 exploded 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
现在我遇到了这个问题:
好的,我得到的是:failed to execute goal ...proguard .. Can't rename /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>