java - 如何使用 proguard 和 maven 从 war 中混淆一个 jar

标签 java maven obfuscation proguard

我对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>

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

(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/

相关文章:

java - 在 Eclipse 中启动一个简单的 Maven 项目的问题?

java - 在 Java 中混淆字符串

java - 从 Xuggler 中的帧获取视频

java - ClassA 内的 ClassA 导入语句?为什么设计师允许这样做?

java - 如何在Java应用程序中使用scala类JavaDStreamKafkaWriter?

maven - IntelliJ Idea中如何编译打包maven gwt项目

android - Proguard从Gradle插件2.1.2到2.3.3输出了不同的混淆结果

ant - 如何使用 Ant 和 YGuard 混淆我的 Web 应用程序 project.war?

java - 如何同时用String和int实现setter和getter?

java - 使用 extjs 4 spring 上传图像文件