【问题标题】:ProGuard + Maven with Java 7带有 Java 7 的 ProGuard + Maven
【发布时间】:2012-06-11 08:31:51
【问题描述】:

我正在尝试让 ProGuard 成为我们 Maven 构建过程的一部分。问题是官方的Maven插件使用的是ProGuard 4.3,不支持Java 7。有什么简单的方法可以让插件改用Proguard 4.8吗?

我尝试为插件指定依赖项,但 ProGuard 似乎有一个新的 Maven 模块结构(proguard-base、proguard-parent 等),因此插件不能使用任何 >4.4 版本。这是我当前的 pom 的外观:

 <plugin>
                <groupId>com.pyx4me</groupId>
                <artifactId>proguard-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>proguard</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <proguardVersion>4.8</proguardVersion>
                    <obfuscate>true</obfuscate>
                    <options>
                        <option>-allowaccessmodification</option>
                        <option>-keep public class com.degoo.ui.ClientBackendStarter { public *; public static *; }</option>
                    </options>
                    <injar>${project.build.finalName}.jar</injar>
                    <outjar>${project.build.finalName}-small.jar</outjar>
                    <outputDirectory>${project.build.directory}</outputDirectory>
                    <libs>
                        <lib>${java.home}/lib/rt.jar</lib>
                        <lib>${java.home}/lib/jsse.jar</lib>
                    </libs>
                    <addMavenDescriptor>false</addMavenDescriptor>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>net.sf.proguard</groupId>
                        <artifactId>proguard</artifactId>
                        <version>4.8</version>
                        <scope>runtime</scope>
                    </dependency>
                </dependencies>
            </plugin>

有什么建议吗?

【问题讨论】:

  • ProGuard 本身(及其 jars)的结构没有改变,所以从这方面来说,升级应该是微不足道的。不过,我不了解 Maven 或其插件。

标签: java maven proguard


【解决方案1】:

我使用来自com.github.wvengen 的 proguard-maven-plugin。注意不同的groupId。这样我就可以使用最新的proguard-base artifact 5.0。两者都在 Maven 中心。这是我的 pom.xml 中的 proguard-base 部分现在的样子:

父 pom.xml:

<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>com.github.wvengen</groupId>
                <artifactId>proguard-maven-plugin</artifactId>
                <version>2.0.8</version>
                <dependencies>
                    <dependency>
                        <groupId>net.sf.proguard</groupId>
                        <artifactId>proguard-base</artifactId>
                        <version>5.0</version>
                        <scope>runtime</scope>
                    </dependency>
                </dependencies>
            </plugin>
[...]

这是我的孩子 pom.xml 的其余部分,但您可能想要修改它:

 <build>
    <plugins>
        <plugin>
            <groupId>com.github.wvengen</groupId>
            <artifactId>proguard-maven-plugin</artifactId>
            <executions>
                <execution>
                    <id>process-classes-with-proguard</id>
                    <phase>process-classes</phase>
                    <goals>
                        <goal>proguard</goal>
                    </goals>
                    <configuration>
                        <maxMemory>256m</maxMemory>
                        <injar>classes</injar>
                        <libs>
                            <lib>${rt.jar.path}</lib>
                            <lib>${jsse.jar.path}</lib>
                        </libs>
                        <obfuscate>true</obfuscate>
                        <attach>true</attach>
                        <addMavenDescriptor>false</addMavenDescriptor>
                        <proguardInclude>${project.basedir}/proguard.conf</proguardInclude>
                    </configuration>
                </execution>
            </executions>
        </plugin>

更新:对于我的 Android 项目,我没有使用像 proguard-maven-plugin 这样的专用 Proguard 插件,因为 android-maven-plugin 自己处理 ProGuard 混淆,并且更好地集成到Android 的构建过程。

【讨论】:

  • 这是因为用于 java 7 的 4.9 版本
【解决方案2】:

原来proguard-maven-plugin有一个fork。这是git-hubed。请参阅how you do it

Here 是我们如何做到这一点的最新示例。 不需要更多个人资料。

【讨论】:

    【解决方案3】:

    我在这里找到了解决方案:https://groups.google.com/forum/?fromgroups#!topic/pyx4me-users/NUZi1oySvQE。基本上我必须下载 ProGuard 并将其安装到我的本地仓库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-21
      • 2014-04-15
      • 1970-01-01
      • 1970-01-01
      • 2014-02-02
      • 2019-02-13
      相关资源
      最近更新 更多