如何使用proguard和maven来混淆战争中的一个罐子

时间:2012-12-28 12:18:25

标签: java maven obfuscation proguard

我对proguard感到有些困惑。 我在我的pom.xml中有这个设置 首先,< 标签不起作用...如果我使用此标签,则proguard的最终调用不包含-injars。 其次,我不确定是否可以混淆在WEB-INF / lib中发生的一个jar(我在一个jar中编译我的所有代码)并过滤掉所有其他的lib。

<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}转向绝对路径,而且还有一个绝对路径。

1 个答案:

答案 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>

在您的情况下,您以不同的方式配置injarsoutjar,这很奇怪。

  

(我在一个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 如果这样做最终会尝试进行更多混淆。