You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 23:45:04