首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将proguard-maven-plugin配置为筛选库jar的META

将proguard-maven-plugin配置为筛选库jar的META
EN

Stack Overflow用户
提问于 2017-10-24 18:07:28
回答 1查看 2.3K关注 0票数 6

我试图使用ProGuard来混淆我的Java8JAR。我很难在我的ProGuard文件中配置pom.xml插件,以便将我需要的配置发送到ProGuard。

背景:

我的一个依赖项依赖于Log4j 2.9.1。我在ProGuard - https://sourceforge.net/p/proguard/bugs/665/中遇到了一个文档很好的bug。

作为一种解决方法,它建议向log4j库添加一个过滤器,以忽略META类。

代码语言:javascript
复制
-libraryjars "log4j-api-2.9.0.jar"(!META-INF/versions/9/**.class)

发行:

我未能成功地配置maven插件将此配置发送到ProGuard。

(注意: maven插件自动为log4j添加log4j配置,因为它是一个项目依赖项。)

失败#1:

我尝试添加一个排除,以防止这个库被自动包含,并添加一个lib条目来添加过滤器。

代码语言:javascript
复制
<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的参数看起来像

代码语言:javascript
复制
-libraryjars, '/mnt/juser/repository/org/apache/logging/log4j/log4j-api/2.9.1/log4j-api-2.9.1.jar(!META-INF/versions/**.class)',

而我正在接受错误

代码语言:javascript
复制
 [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声明中添加标点符号。

代码语言:javascript
复制
<lib>"${env.LOG4J_REPOSITORY}/log4j-api-2.9.1.jar"(!META-INF/versions/**.class)</lib>

它为ProGuard创建了这个参数

代码语言:javascript
复制
-libraryjars, '"/mnt/juser/repository/org/apache/logging/log4j/log4j-api/2.9.1/log4j-api-2.9.1.jar"(!META-INF/versions/**.class)',

失败,并出现以下错误

代码语言:javascript
复制
[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

我已经尝试使用包含来显式地添加带有过滤器的库。

代码语言:javascript
复制
<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条目列出,但是没有过滤器。

EN

回答 1

Stack Overflow用户

发布于 2018-05-07 11:11:43

我也遇到过同样的问题。以下配置适用于我:

代码语言:javascript
复制
<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>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46917251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档