ProGuard + Maven с Java 7
Я пытаюсь сделать ProGuard частью нашего процесса сборки Maven. Проблема в том, что официальный плагин Maven использует ProGuard 4.3, который не поддерживает Java 7. Есть ли простой способ заставить плагин использовать вместо него Proguard 4.8?
Я попытался указать зависимость для плагина, но ProGuard, похоже, имеет новую структуру для модулей Maven (proguard-base, proguard-parent и т. Д.), Поэтому плагин не может использовать любую версию>4.4. Вот как выглядит мой нынешний пом:
<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>
Какие-либо предложения?
3 ответа
Я нашел решение здесь: https://groups.google.com/forum/?fromgroups. По сути, мне пришлось скачать и установить ProGuard для моего локального репо.
Я использую Proguard-Maven-плагин из com.github.wvengen
, Обратите внимание на разные groupId
, Таким образом, я могу использовать последние proguard-base
Артефакт 5.0. Оба находятся в Maven Central. Вот как выглядит часть proguard-base в моем pom.xml:
Родитель 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, такой как proguard-maven-plugin, так как android-maven-plugin обрабатывает само обфускацию ProGuard и лучше интегрируется в процесс сборки для Android.
Есть форк оригинального proguard-maven-plugin. Это мерзавец Пожалуйста, посмотрите, как вы это делаете.
Вот последний пример того, как мы это делаем. Больше никаких профилей не требуется.