Reputation: 3
I have folder "plugins" library where I put my code packed as jars(2 files). Also i have my javafx application, which is packed with maven-assembly-plugin which generate jar with all dependencies.
--
|-plugins
|-plugin-1.jar
|-plugin-2.jar
|-{filename}-jar-with-depenencies.jar
Is that possible to obfuscate not only jar with dependencies and keep directory structure.
p.s when I obfuscate {filename}-jar-with-depenencies.jar and copy to project directory all works fine, but i need my plugins being obfuscated
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<inherited>true</inherited>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>com.app.myapp.gui.MainWindow</mainClass>
<packageName>com.app.myapp.gui</packageName>
<addClasspath>true</addClasspath>
<classpathPrefix>plugins/</classpathPrefix>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.8</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>com.app.myapp.gui.MainWindow</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<appendAssemblyId>true</appendAssemblyId>
</configuration>
<executions>
<execution>
<id>make-assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- bind to the packaging phase -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>com.github.wvengen</groupId>
<artifactId>proguard-maven-plugin</artifactId>
<version>2.0.10</version>
<executions>
<execution>
<phase>package</phase>
<goals><goal>proguard</goal></goals>
</execution>
</executions>
<configuration>
<obfuscate>true</obfuscate>
<injar>plugins\v-plugin-1.16.0-24.jar</injar>
<injar>plugins\p-plugin-1.16.0-24.jar</injar>
<injar>${project.build.finalName}-jar-with-dependencies.jar</injar> <!-- make sure to obfuscate the jar with dependencies -->
<includeDependency>true</includeDependency>
<proguardVersion>5.2</proguardVersion>
<includeDependency>true</includeDependency>
<options>
<option>-allowaccessmodification</option>
<option>-flattenpackagehierarchy ''</option>
<option>-dontoptimize</option>
<option>-dontshrink</option>
<option>-dontnote</option>
<option>-dontwarn</option> <!-- added option to ignore com.sun missing classes -->
<option>-dontusemixedcaseclassnames</option>
<option>-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod, CallbackMethods </option>
<option>-keep class !com.app.** { *; }</option>
<option>-keepclasseswithmembers public class * { public static void main(java.lang.String[]); } </option>
<option>-dontskipnonpubliclibraryclassmembers</option>
<option>-dontskipnonpubliclibraryclasses</option>
<option>-verbose</option>
</options>
<libs>
<lib>${java.home}/lib/rt.jar</lib>
<lib>${java.home}/lib/ext/jfxrt.jar</lib>
</libs>
</configuration>
<dependencies>
<dependency>
<groupId>net.sf.proguard</groupId>
<artifactId>proguard-base</artifactId>
<version>5.2.1</version>
<scope>runtime</scope>
</dependency>
</dependencies>
</plugin>
Upvotes: 0
Views: 756
Reputation: 2340
I would suggest to obfuscate code while packaging them using proguard maven plugin.
So once your jar files reaches destination which is plugins in your case, they would be already obfuscated.
This would be a cleaner approach.
This is all I can suggest without looking your build process.
Upvotes: 1