我对proguard感到有些困惑。
我在我的pom.xml中有这个设置
首先,<
<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}转向绝对路径,而且还有一个绝对路径。
答案 0 :(得分:0)
首先,我从未使用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
,这很奇怪。
(我在一个jar中编译我的所有代码)并过滤所有其他的libs。 我有很多警告,因为似乎proguard试图混淆WEB-INF / lib中的每个jar
在这种情况下,警告不是来自ProGuard尝试编译所有lib的事实,而是因为当它混淆了过滤后的代码时,它希望看到对extarnal libs的引用。 See this.
您需要为代码中引用的每个外部jar添加
<lib>path/lib.jar</lib>
这可能会帮助您避免许多警告,但是当您配置-keep
选项时,真正的艺术就会开始。
我建议从这个配置开始https://stackoverflow.com/a/7511926/1360074
如果这样做最终会尝试进行更多混淆。