我对proguard有点不解。 我的 pom.xml 中有这个设置 首先,< injar > 标签不起作用...如果我使用此标签,proguard 的最终调用不包含 -injars。 其次,我不确定是否可以只对 WEB-INF/lib 中发生的一个 jar 进行混淆处理(我在一个 jar 中编译我的所有代码)并过滤所有其他库。
<plugin>
<groupId>com.pyx4me</groupId>
<artifactId>proguard-maven-plugin</artifactId>
<version>2.0.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>proguard</goal>
</goals>
</execution>
</executions>
<configuration>
<proguardVersion>4.8</proguardVersion>
<obfuscate>true</obfuscate>
<maxMemory>1024m</maxMemory>
<includeDependency>false</includeDependency>
<options>
<option>-injars target/Test.war</option>
<option>-ignorewarnings</option>
</options>
<outjar>target/Test-obf.war</outjar>
<attach>false</attach>
<outputDirectory>${project.build.directory}</outputDirectory>
<proguardInclude>${basedir}\proguard.conf</proguardInclude>
<libs>
<lib>${java.home}/lib/rt.jar</lib>
</libs>
<addMavenDescriptor>false</addMavenDescriptor>
<skip>false</skip>
</configuration>
<dependencies>
<dependency>
<groupId>net.sf.proguard</groupId>
<artifactId>proguard</artifactId>
<version>4.4</version>
<scope>runtime</scope>
</dependency>
</dependencies>
</plugin>
使用该配置我有很多警告,因为 proguard 似乎试图混淆 WEB-INF/lib 中的每个 jar 有人可以传播光吗?提前谢谢你。
添加: 位于所有参数前面的输出问题对我来说非常棘手。据我了解,在 pom.xml 中同时指定 injars 和 outjars 时,不应使用 ${basedir}。因为 ${basedir} 变成了绝对路径并且 intenaly proguard 也放了一个绝对路径。
最佳答案
首先,我从未使用过 Maven 的 ProGuard,只使用过 Ant。
我将你的配置文件与 here 中的配置文件进行比较
<options>
<option>-allowaccessmodification</option>
<option>-keep public class com.degoo.ui.ClientBackendStarter { public *; public static *; }</option>
</options>
<injar>${project.build.finalName}.jar</injar>
<outjar>${project.build.finalName}-small.jar</outjar>
在您的情况下,您以不同的方式配置 injars
和 outjar
,这看起来很奇怪。
(I compile all my code in the one jar) and filter every other libs. I have a lot of warnings cause it seems that proguard tries to obfuscate every jar in WEB-INF/lib
在那种情况下,警告不是来自 ProGuard 试图编译所有库的事实,而是因为当它混淆您过滤后的代码时,它希望看到对外部库的引用。 See this.
您需要为代码中引用的每个外部 jar 添加
<lib>path/lib.jar</lib>
这可能会帮助您避免许多警告,但真正的艺术是在您配置 -keep
选项时开始的。
我建议从这个配置开始 https://stackoverflow.com/a/7511926/1360074
如果最终可行,请尝试进行更多混淆。
关于java - 如何使用 proguard 和 maven 从 war 中混淆一个 jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14069459/