Java ProGuard不';t用依赖项混淆JAR

Java ProGuard不';t用依赖项混淆JAR,java,maven,maven-3,proguard,obfuscation,Java,Maven,Maven 3,Proguard,Obfuscation,我有一个项目,其中包含下面给出的pom.xml文件。当我发出命令mvncleancipileassembly:singleinstall时,我希望Maven生成一个JAR,其中包含 所有依赖项和 我的代码的模糊版本 它不起作用-我的代码在“jar with dependencies”文件中没有被混淆 运行mvn clean compile install时,生成的文件包含应用程序的模糊代码,但没有依赖项 为了拥有一个包含所有依赖项和模糊代码的JAR文件,我该怎么做 4.0.0 com.my

我有一个项目,其中包含下面给出的
pom.xml
文件。当我发出命令
mvncleancipileassembly:singleinstall
时,我希望Maven生成一个JAR,其中包含

  • 所有依赖项和
  • 我的代码的模糊版本
它不起作用-我的代码在“jar with dependencies”文件中没有被混淆

运行
mvn clean compile install
时,生成的文件包含应用程序的模糊代码,但没有依赖项

为了拥有一个包含所有依赖项和模糊代码的JAR文件,我该怎么做


4.0.0
com.mycompany

您需要配置插件,通过指定以下属性,使
jar与依赖项混淆:

指定要处理的应用程序的输入jar名称(或wars、EAR、ZIP)

${project.build.finalName}-jar-with-dependencies.jar
现在,POM中插件的执行顺序也有问题:我们需要确保
maven汇编插件
proguard maven插件
之前执行。因此,最好为绑定到
阶段的
maven汇编插件
定义一个显式执行,而不是使用
assembly:single
从命令行手动调用它。这将是配置:


maven汇编插件
装配
单一的
包裹
带有依赖项的jar
然后,您只需要确保POM中的
proguard maven插件
插件配置在该配置之后

这样做之后,通过
mvnclean install
调用Maven将导致一个带有依赖项的模糊jar


为了使用实际的POM进行测试,我添加了两个存储库:

  • https://repo.spongepowered.org/maven
    以解决
    spongapi
    依赖关系
  • http://maven.restlet.com
    来解析
    org.restlet.jse
    依赖关系
对于这两个依赖项,ProGuard生成了警告,因为
org.restlet.ext.jackson
依赖项使用了不在构建路径上的
com.sun.msv.*
类。因为我认为您的代码目前正在工作,这意味着这些类不需要被包括在内,这些警告可以被忽略。因此,我添加了
-dontwarn
选项,以便ProGuard在出现警告时不会出错

我能够成功地用依赖项混淆jar的最后一个POM如下所示:


4.0.0
com.mycompany
我的产品
1.0-快照
海绵动力
https://repo.spongepowered.org/maven
再出租
http://maven.restlet.com
2.3.5
${project.basedir}/src/main/resources
真的
maven编译器插件
3.3
1.8
1.8
org.codehaus.mojo
模板maven插件
1.0-α-3
过滤器src
过滤源
maven汇编插件
装配
单一的
包裹
带有依赖项的jar
com.github.wvengen
proguard maven插件
2.0.8
包裹
前卫
${project.build.finalName}-jar-with-dependencies.jar
5.2
-允许访问修改
-dontoptimize
-dontshrink
-dontnote
-唐特沃恩
-保留署名
-保持类com.mycompany.MyPlugin{*;}
${java.home}/lib/rt.jar
net.sf.proguard
前卫基地
5.2
运行时
海绵状
海绵皮
3.0.0
假如
朱尼特
朱尼特
4.12
org.easytesting
fest断言核心
2.0M8
测试
<plugin>
    <groupId>com.github.wvengen</groupId>
    <artifactId>proguard-maven-plugin</artifactId>
    <version>2.0.8</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals><goal>proguard</goal></goals>
        </execution>
    </executions>
    <configuration>
        <proguardVersion>5.2</proguardVersion>
        <options>
            <option>-allowaccessmodification</option>
            <option>-dontoptimize</option>
            <option>-dontshrink</option>
            <option>-dontnote</option>
            <option>-keepattributes Signature</option>
            <option>-keep class com.mycompany.MyPlugin { *; }</option>
        </options>
        <injar>${project.build.finalName}-jar-with-dependencies.jar</injar>
        <libs>
            <lib>${java.home}/lib/rt.jar</lib>
        </libs>
        <dependencies>
            <dependency>
                <groupId>net.sf.proguard</groupId>
                <artifactId>proguard-base</artifactId>
                <version>5.2</version>
                <scope>runtime</scope>
            </dependency>
        </dependencies>
    </configuration>
</plugin>