Обфусцировать зависимости в одну банку с Proguard
У меня есть модульное приложение Maven, и "module1" зависит от "module2", а "module2" зависит от "module3" и т. Д. В module1 у меня есть что-то вроде этого:
<profile>
<id>obfuscate</id>
<build>
<plugins>
<plugin>
<groupId>com.pyx4me</groupId>
<artifactId>proguard-maven-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>proguard</goal>
</goals>
</execution>
</executions>
<configuration>
<options>
<option>-allowaccessmodification</option>
<option>-keep public class com.test.Main { *; }</option>
</options>
<libs>
<lib>${java.home}/lib/rt.jar</lib>
</libs>
</configuration>
<dependencies>
<dependency>
<groupId>net.sf.proguard</groupId>
<artifactId>proguard</artifactId>
<version>${proguard.version}</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
Это создает успешно запутанный "module1". Я хочу создать один jar со всеми запутанными зависимостями (запутанный module1 и module2 и т. Д.). Является ли это возможным?
3 ответа
Плагин Maven Shade
Этот плагин предоставляет возможность упаковать артефакт в uber-jar, включая его зависимости, и затемнить - т.е. переименовать - пакеты некоторых из зависимостей.
Попробуйте <assembly>
вариант maven-proguard-plugin
, Сделайте ссылки на каждую из зависимостей, которые вы хотели связать в запутанную банку. Смотрите примеры.
Если вы хотите, чтобы jar зависимостей пакетов был в вашем uber jar, используйте плагин shade! вот пример:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"/>
</transformers>
</configuration>
</execution>
</executions>
</plugin>