【发布时间】:2018-04-05 15:33:08
【问题描述】:
我正在尝试使用 ProGuard 来混淆我的 Java 8 jar。我无法在我的 pom.xml 文件中配置 ProGuard 插件,以便将我需要的配置发送到 ProGuard。
背景:
我的一个依赖项依赖于 Log4j 2.9.1。我在 ProGuard 中遇到了一个有据可查的错误 - https://sourceforge.net/p/proguard/bugs/665/。
它建议将过滤器添加到 log4j 库以忽略 META-INF 类作为解决方法。
-libraryjars "log4j-api-2.9.0.jar"(!META-INF/versions/9/**.class)
问题:
我未能成功配置 maven 插件以将此配置发送到 ProGuard。
(注意:maven 插件会自动为 log4j 添加 -libraryjars 配置,因为它是一个项目依赖项。)
失败的尝试 #1:
我已尝试添加排除项以防止自动包含此库,并尝试添加一个库条目以将其与过滤器一起添加。
<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 条目,但没有过滤器。
【问题讨论】: