我有一个项目与下面给出的pom.xml文件.当我发出命令mvn clean compile assembly:single install我想要Maven生成一个JAR,其中包含
>所有的依赖和
>我的代码的模糊版本.
它不起作用 – 我的代码在“jar-with-dependencies”文件中没有被模糊化.
当我运行mvn clean编译安装生成的文件包含我的应用程序的模糊代码,但没有依赖关系.
为了拥有一个具有所有依赖关系和我的混淆代码的JAR文件,我该怎么办?
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.mycompany</groupId> <artifactId>myproduct</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <properties> <restlet-version>2.3.5</restlet-version> </properties> <dependencies> <dependency> <groupId>org.spongepowered</groupId> <artifactId>spongeapi</artifactId> <version>3.0.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <dependency> <groupId>org.easytesting</groupId> <artifactId>fest-assert-core</artifactId> <version>2.0M8</version> <scope>test</scope> </dependency> <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-core</artifactId> <version>1.10.19</version> <scope>test</scope> </dependency> <dependency> <groupId>org.restlet.jse</groupId> <artifactId>org.restlet</artifactId> <version>${restlet-version}</version> </dependency> <dependency> <groupId>org.restlet.jse</groupId> <artifactId>org.restlet.ext.jackson</artifactId> <version>${restlet-version}</version> </dependency> <dependency> <groupId>com.googlecode.json-simple</groupId> <artifactId>json-simple</artifactId> <version>1.1.1</version> </dependency> </dependencies> <build> <resources> <resource> <directory>${project.basedir}/src/main/resources</directory> <filtering>true</filtering> </resource> </resources> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.3</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>templating-maven-plugin</artifactId> <version>1.0-alpha-3</version> <executions> <execution> <id>filter-src</id> <goals> <goal>filter-sources</goal> </goals> </execution> </executions> </plugin> <plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> </plugin> <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> <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> </plugins> </build> </project>
更新1(17.01.2016 19:54 MSK):更改了ProGuard配置,如下所示,但是mvn clean编译程序集:single仍然使用无模糊化的类文件生成JAR.
<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>
更新2(17.01.2016 20:29 MSK):mvn clean compile assembly:single install failed.最后的消息可以看出here.
解决方法
proguard-maven-plugin将模糊项目的主要工件,而不是maven-assembly-plugin生成的辅助工件jar-with-dependencies.
您需要配置插件以通过指定injar
属性来模糊jar-with-dependencies: