我试图使用ProGuard来混淆我的Java8JAR。我很难在我的ProGuard文件中配置pom.xml插件,以便将我需要的配置发送到ProGuard。
背景:
我的一个依赖项依赖于Log4j 2.9.1。我在ProGuard - https://sourceforge.net/p/proguard/bugs/665/中遇到了一个文档很好的bug。
作为一种解决方法,它建议向log4j库添加一个过滤器,以忽略META类。
-libraryjars "log4j-api-2.9.0.jar"(!META-INF/versions/9/**.class)发行:
我未能成功地配置maven插件将此配置发送到ProGuard。
(注意: maven插件自动为log4j添加log4j配置,因为它是一个项目依赖项。)
失败#1:
我尝试添加一个排除,以防止这个库被自动包含,并添加一个lib条目来添加过滤器。
<exclusions>
<exclude>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
</exclude>
</exclusions>
<libs>
<lib>${env.LOG4J_REPOSITORY}/log4j-api-2.9.1.jar(!META-INF/versions/**.class)</lib>
</libs>排除是成功的,但lib条目失败。它被当作文件名来处理,所以ProGuard的参数看起来像
-libraryjars, '/mnt/juser/repository/org/apache/logging/log4j/log4j-api/2.9.1/log4j-api-2.9.1.jar(!META-INF/versions/**.class)',而我正在接受错误
[proguard] Error: Can't read [/mnt/juser/repository/org/apache/logging/log4j/log4j-api/2.9.1/log4j-api-2.9.1.jar(!META-INF/versions/**.class)] (No such file or directory)我尝试在lib声明中添加标点符号。
<lib>"${env.LOG4J_REPOSITORY}/log4j-api-2.9.1.jar"(!META-INF/versions/**.class)</lib>它为ProGuard创建了这个参数
-libraryjars, '"/mnt/juser/repository/org/apache/logging/log4j/log4j-api/2.9.1/log4j-api-2.9.1.jar"(!META-INF/versions/**.class)',失败,并出现以下错误
[proguard] Error: Can't read [/home/juser/working/"/mnt/juser/repository/org/apache/logging/log4j/log4j-api/2.9.1/log4j-api-2.9.1.jar"(!META-INF/versions/**.class)] (No such file or directory)失败#2
我已经尝试使用包含来显式地添加带有过滤器的库。
<assembly>
<inclusions>
<inclusion>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<library>true</library>
<filter>!META-INF/versions/**.class</filter>
</inclusion>
</inclusions>
</assembly>库被作为一个-libraryjars条目列出,但是没有过滤器。
发布于 2018-05-07 11:11:43
我也遇到过同样的问题。以下配置适用于我:
<plugin>
<groupId>com.github.wvengen</groupId>
<artifactId>proguard-maven-plugin</artifactId>
<configuration>
<exclusions>
<!-- exclude the artifact -->
<exclusion>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
</exclusion>
</exclusions>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals><goal>proguard</goal></goals>
</execution>
<execution>
<id>obfuscate-uber</id>
<phase>package</phase>
<goals><goal>proguard</goal></goals>
<configuration>
<injar>${project.build.finalName}-uber.jar</injar>
<outjar>${project.build.finalName}-uber.jar</outjar>
<!-- filter out unwanted parts -->
<inFilter>!META-INF/versions/9/**.class</inFilter>
</configuration>
</execution>
</executions>
</plugin>https://stackoverflow.com/questions/46917251
复制相似问题