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,其中包含
- 所有依赖项和
- 我的代码的模糊版本
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>