java - ProGuard 异常“输入 jar 和输出 jar 必须不同”
问题描述
我尝试从 maven 插件运行 ProGuard,但出现错误:
[proguard] ProGuard, version 5.2.1
[proguard] java.io.IOException: Input jars and output jars must be different [D:\projects\demoObfuscation\target\demo-0.0.1-SNAPSHOT.jar].
[proguard] at proguard.ConfigurationChecker.checkConflicts(ConfigurationChecker.java:202)
[proguard] at proguard.ConfigurationChecker.check(ConfigurationChecker.java:82)
[proguard] at proguard.ProGuard.execute(ProGuard.java:73)
[proguard] at proguard.ProGuard.main(ProGuard.java:538)
在 proGuard 配置中我有这个:
-injars /target/demo-0.0.1-SNAPSHOT.jar
-outjars /target/demo-pro.jar
编辑:
带插件的最小 POM:
<build>
<plugins>
<plugin>
<groupId>com.github.wvengen</groupId>
<artifactId>proguard-maven-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>proguard</goal>
</goals>
</execution>
</executions>
<configuration>
<proguardInclude>${basedir}/proguard.conf</proguardInclude>
<libs>
<lib>${java.home}/lib/rt.jar</lib>
<lib>${java.home}/lib/jce.jar</lib>
</libs>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
<configuration>
<mainClass>${start-class}</mainClass>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
解决方案
我认为您的 proguard 配置未读取。尝试直接在插件中配置proguard:
<plugin>
<groupId>com.github.wvengen</groupId>
<artifactId>proguard-maven-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>proguard</goal>
</goals>
</execution>
</executions>
<configuration>
<injar>demo-${project.version}.jar</injar>
<outjar>demo.jar</outjar>
<options>
<option>-keep public class Main { *; }</option>
</options>
<libs>
<lib>${java.home}/lib/rt.jar</lib>
<lib>${java.home}/lib/jce.jar</lib>
</libs>
</configuration>
</plugin>
<plugin>
-keep
选项是必需的(把你的主要课程放在这里)。您可以阅读有关proguard-maven-plugin
文档的更多信息。
推荐阅读
- javascript - WEB Mobile:无控件自动播放视频
- javascript - 无法在反应 js 中传递带有表单数据的 JSON 对象(始终 json JSON 为空)
- c - 查找用户输入的最大数字,并确定最大数字输入了多少次
- python - 如何从单个列表中连接字符串
- java - 运行简单的 slick 应用程序时出错
- c++ - 定义析构函数时为自定义类数组分配的额外字节
- html - 如果没有 > 符号,这将如何写?
- go - 从 exec.Command 逐行捕获标准输出,并通过管道传输到 os.Stdout
- javascript - voiceStateUpdate 事件不做任何事情
- javascript - 如何将json文件的内容作为url参数传递