Proguard Maven Plugin 忽略指定的带jar-with-dependencies后缀的injar包名称
问题根因
你在pom文件中将injar的配置写在了proguard插件的<execution>节点内部,该配置仅在插件绑定的生命周期阶段(你配置的是package阶段)被触发时生效。当你直接执行proguard:proguard命令调用插件目标时,不会读取execution内部的配置,插件会使用默认的injar路径${project.build.finalName}.jar,因此找不到带-jar-with-dependencies后缀的jar包。
解决方案
方案1:使用Maven生命周期执行(推荐)
你已经在pom里完成了两个插件的阶段绑定:
- maven-assembly-plugin绑定到了
prepare-package阶段,会在打包前生成带依赖的jar包 - proguard-maven-plugin绑定到了
package阶段,会在assembly生成jar后执行混淆
直接执行以下命令即可按顺序完成全流程:
mvn clean package
执行时会自动按阶段顺序触发两个插件的逻辑,此时execution内的injar配置会生效,能正确识别带后缀的jar包。
方案2:调整插件配置为全局生效
如果需要单独调用proguard:proguard目标,可以把configuration节点从execution内部移到插件的全局配置层级,调整后的proguard插件配置示例如下:
<plugin> <groupId>com.github.wvengen</groupId> <artifactId>proguard-maven-plugin</artifactId> <version>2.0.8</version> <!-- 全局配置,直接调用插件目标也会生效 --> <configuration> <injar>${project.build.finalName}-jar-with-dependencies.jar</injar> <proguardVersion>5.2</proguardVersion> <options> <option>-allowaccessmodification</option> <option>-dontoptimize</option> <option>-dontshrink</option> <option>-dontnote</option> <option>-dontwarn</option> <option>-keepattributes Signature</option> </options> <libs> <lib>${java.home}/lib/rt.jar</lib> </libs> </configuration> <executions> <execution> <phase>package</phase> <goals> <goal>proguard</goal> </goals> </execution> </executions> </plugin>
调整后你原来使用的mvn clean compile assembly:single proguard:proguard命令也可以正常运行。
内容的提问来源于stack exchange,提问作者DeveloperKurt
相关产品推荐
相关产品推荐

