Java 如何在使用proguard maven插件后组装项目
我试图在打包我的应用程序时添加混淆步骤。我认为我必须在编译器插件和程序集之间插入Proguard插件(程序集只是将我所有的应用程序和依赖项放在一个jar中)Java 如何在使用proguard maven插件后组装项目,java,maven,proguard,maven-assembly-plugin,Java,Maven,Proguard,Maven Assembly Plugin,我试图在打包我的应用程序时添加混淆步骤。我认为我必须在编译器插件和程序集之间插入Proguard插件(程序集只是将我所有的应用程序和依赖项放在一个jar中) myApp org.apache.maven.plugins maven编译器插件 3.2 1.7 1.7 com.github.wvengen proguard maven插件 2.0.11 模糊包装 包裹 前卫 5.2 真的 真的 假的 真的 ${project.build.finalName}.jar ${project.build
myApp
org.apache.maven.plugins
maven编译器插件
3.2
1.7
1.7
com.github.wvengen
proguard maven插件
2.0.11
模糊包装
包裹
前卫
5.2
真的
真的
假的
真的
${project.build.finalName}.jar
${project.build.finalName}.jar
真的
${java.home}/lib/rt.jar
...
net.sf.proguard
前卫基地
5.2
maven汇编插件
2.4
创建可执行jar
包裹
单一的
assembly.xml
myApp.Main
编译工作正常,模糊处理工作正常,但程序集似乎是用普通jar制作的,而不是模糊处理的jar
以下是my assembly.xml(如果需要):
<?xml version="1.0" encoding="UTF-8"?>
<assembly>
<id>with-dep</id>
<formats>
<format>jar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
<dependencySet>
<!-- unpack les dépendances avant de les inclures dans le jar final de l'application -->
<unpack>true</unpack>
<scope>runtime</scope>
<useProjectArtifact>false</useProjectArtifact>
</dependencySet>
</dependencySets>
<fileSets>
<fileSet>
<directory>${project.build.outputDirectory}</directory>
<outputDirectory></outputDirectory>
</fileSet>
</fileSets>
</assembly>
与dep
罐子
假的
真的
运行时
假的
${project.build.outputDirectory}
最后,myApp.jar被模糊化了,但是myApp-with-dep.jar不是。。。
我还明确表示,我不太确定我的proguard插件的配置。如果你看到奇怪的事情,就说出来
谢谢您的时间。我通过放弃maven assembly插件改为shade插件解决了这个问题。希望它能帮助别人
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<!--Obfuscation-->
<plugin>
<groupId>com.github.wvengen</groupId>
<artifactId>proguard-maven-plugin</artifactId>
<version>2.0.13</version>
<executions>
<execution>
<id>obfuscation-packaging</id>
<phase>package</phase>
<goals>
<goal>proguard</goal>
</goals>
<configuration>
<proguardVersion>5.2</proguardVersion>
<obfuscate>true</obfuscate>
<addMavenDescriptor>true</addMavenDescriptor>
<injar>${project.build.finalName}.jar</injar>
<outjar>${project.build.finalName}.jar</outjar>
<mappingFileName>proguard_map.txt</mappingFileName>
<seedFileName>proguard_seed.txt</seedFileName>
<libs>
<lib>${java.home}/lib/rt.jar</lib>
</libs>
<options>
...
</options>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>net.sf.proguard</groupId>
<artifactId>proguard-base</artifactId>
<version>5.2</version>
</dependency>
</dependencies>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>xxx.Main</mainClass>
</transformer>
</transformers>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
</configuration>
</execution>
</executions>
</plugin>
org.apache.maven.plugins
maven编译器插件
3.2
1.7
1.7
com.github.wvengen
proguard maven插件
2.0.13
模糊包装
包裹
前卫
5.2
真的
真的
${project.build.finalName}.jar
${project.build.finalName}.jar
proguard_map.txt
proguard_seed.txt
${java.home}/lib/rt.jar
...
net.sf.proguard
前卫基地
5.2
org.apache.maven.plugins
maven阴影插件
2.4.3
包裹
阴凉处
xxx.Main
*:*
META-INF/*.SF
META-INF/*.DSA
META-INF/*.RSA
将maven assembly plugin的打包阶段更改为准备打包
阶段,maven assembly plugin将在proguard-maven-plugin之前运行。这可能是个好主意,但随后我得到一个“找不到文件路径/to/myApp.jar”。但是多亏了这一点,我想我开始理解这个问题了,这意味着jar还没有生成。这是否意味着它是由程序集插件根据您的配置生成的
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<!--Obfuscation-->
<plugin>
<groupId>com.github.wvengen</groupId>
<artifactId>proguard-maven-plugin</artifactId>
<version>2.0.13</version>
<executions>
<execution>
<id>obfuscation-packaging</id>
<phase>package</phase>
<goals>
<goal>proguard</goal>
</goals>
<configuration>
<proguardVersion>5.2</proguardVersion>
<obfuscate>true</obfuscate>
<addMavenDescriptor>true</addMavenDescriptor>
<injar>${project.build.finalName}.jar</injar>
<outjar>${project.build.finalName}.jar</outjar>
<mappingFileName>proguard_map.txt</mappingFileName>
<seedFileName>proguard_seed.txt</seedFileName>
<libs>
<lib>${java.home}/lib/rt.jar</lib>
</libs>
<options>
...
</options>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>net.sf.proguard</groupId>
<artifactId>proguard-base</artifactId>
<version>5.2</version>
</dependency>
</dependencies>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>xxx.Main</mainClass>
</transformer>
</transformers>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
</configuration>
</execution>
</executions>
</plugin>