2

我对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 也放置了绝对路径。

4

1 回答 1

0

首先,我从未使用过来自 Maven 的 ProGuard,仅来自于 Ant。

我将您的配置文件与此处的配置文件进行比较

 <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 中编译所有代码)并过滤所有其他库。我有很多警告,因为 proguard 似乎试图混淆 WEB-INF/lib 中的每个 jar

在这种情况下,警告不是来自 ProGuard 尝试编译所有库的事实,而是因为当它混淆过滤后的代码时,它希望看到对外部库的引用。看到这个。

您需要为代码中引用的每个外部 jar 添加

<lib>path/lib.jar</lib>

这可能会帮助您避免许多警告,但真正的艺术在您配置-keep选项时开始。我建议从这个配置开始https://stackoverflow.com/a/7511926/1360074 如果最终可行,请尝试进行更多混淆。

于 2012-12-28T12:35:32.480 回答