java - Proguard 与 Maven

标签 java maven proguard

我正在尝试使用 Proguard 来缩小 jar 大小。

我在 Maven pom.xml 中配置了 Proguard。它未能找到所有嵌入的依赖项 jar。 它可以读取并解析出当前模块中引用的所有依赖jar,但是对于嵌入在其他模块中的依赖,它无法找到它。

例如,我当前的模块是 moduleA,它依赖于另一个模块 moduleB。并且模块B有一个依赖模块C。它可以找到直接位于 moduleB 内部的所有类,但无法解析出 moduleC 内部的所有类。我的 proguard 配置如下:

<plugin>
            <!--groupId>com.pyx4me</groupId-->
            <groupId>com.github.wvengen</groupId>
            <artifactId>proguard-maven-plugin</artifactId>
            <executions>
              <execution>
                <id>proguard</id>
                <phase>package</phase>
                <goals>
                  <goal>proguard</goal>
                </goals>
              </execution>
            </executions>
            <configuration>
              <injar>MyInput-${project.version}.jar</injar>
              <outjar>MyInput-Processed-${project.version}.jar</outjar>
              <options>
                <option>-keep public class * { *; }</option>
                <option>-ignorewarnings</option>
              </options>
              <libs>
                <!--lib>${java.bootstrap.classes}</lib>
                <lib>${java.cryptographic.extension.classes}</lib>
                <lib>${java.secure.socket.extension.classes}</lib-->
              </libs>
            </configuration>
            <dependencies>
              <dependency>
                <groupId>net.sf.proguard</groupId>
                <artifactId>proguard-base</artifactId>
                <version>4.10</version>
                <scope>runtime</scope>
              </dependency>
            </dependencies>
        </plugin>

最佳答案

我遇到了类似的问题,但是它可以找到插件的配置依赖项部分中提到的引用。

但是,如果我尝试使用 proguard-base-4.10,proguard-maven-plugin(带有 com.pyx4me groupId)仍然使用 proguard-4.3.jar(您可以在控制台的 maven 输出中看到它);看起来该插件仅适用于“proguard” Artifact ,而不是“proguard-base”。

所以我将依赖项部分配置为如下所示:

<dependency>
  <groupId>net.sf.proguard</groupId>
  <artifactId>proguard</artifactId>
  <version>4.10</version>
  <scope>runtime</scope>
</dependency>

但这一个在 central maven repo 中不可用(最新版本为4.4)。

我所做的是从 proguard download section 手动下载 proguard-4.10并在 4.10 版本下在本地 Maven 存储库中安装 proguard.jar - 现在一切正常。

关于java - Proguard 与 Maven,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18202256/

相关文章:

ios - 构建阶段脚本未在我的 $PATH 中获取

java - 如何独立于 Spring 上下文使用 @Autowired 和 @Value 注释?

java - 接口(interface)和类中的方法签名相同

Spring Boot .JAR 无法运行(maven、intellij、hibernate...)

java - 我们如何部署二进制依赖项?

android - 创建版本 android apk 时出现 Proguard 异常

java - Gradle badass-runtime-plugin 和 ProGuard Gradle 插件

Android Studio 无法解析 getDefaultProguardFile

java - 将 OpenIE 三元组转换为 N-三元组 (NT)

Java 多线程性能提升