gpt4 book ai didi

java - 配置 proguard-maven-plugin 过滤库 jar 的 META-INF

转载 作者:搜寻专家 更新时间:2023-11-01 00:54:29 24 4
gpt4 key购买 nike

我正在尝试使用 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 条目,但没有过滤器。

最佳答案

我遇到了同样的问题。以下配置对我有用:

<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>

关于java - 配置 proguard-maven-plugin 过滤库 jar 的 META-INF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46917251/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com