It is possible to combine yGuard with maven but you have to make sure obfuscation is called in the correct step of the maven build process.
In order to run yGuard in a maven build process the following antrun plugin configuration in the maven pom.xml file of a jar artifact can be used:
<plugin> <artifactId>maven-antrun-plugin</artifactId> <version>1.7</version> <executions> <execution> <phase>integration-test</phase> <configuration> <tasks> <taskdef name="yguard" classname="com.yworks.yguard.YGuardTask" classpath="build-resources/obfuscator/yguard.jar"/> <copy todir="target"> <fileset dir="target" /> <globmapper from="*.jar" to="backup/*_backup.jar" /> </copy> <yguard> <inoutpairs> <fileset dir="target" includes="myApp*.jar"/> </inoutpairs> <property name="naming-scheme" value="best"/> <rename logfile="renamelog.xml"> <adjust replaceContent="true"> <include name="web.xml"/> </adjust> <keep> <class methods="private" fields="private"> <patternset> <include name="de/myProject/unchanged/**/*"/> </patternset> </class> <class classes="none" methods="none" fields="none"> <patternset> <include name="de/myProject/obfuscate/**/*"/> </patternset> </class> </keep> </rename> </yguard> <copy todir="target"> <fileset dir="target" /> <globmapper from="*_obf.jar" to="*.jar" /> </copy> <delete> <fileset dir="target"> <include name="*_obf.jar"/> </fileset> </delete> </tasks> </configuration> <goals> <goal>run</goal> </goals> </execution> </executions> </plugin>
Note the following aspects:
- the antrun plugin is executed in the "integration-test" phase. During this phase the original jar file that needs to be obfuscated is already built and we have a chance to obfuscate it before it is installed into the local maven repo.
- before obfuscation a backup of the original jar file is done
- after obfuscation (running the yguard-task) the obfuscated jar is renamed to its original name (with the help of copy and delete)
- Afterwards the obfuscated jar is installed into the local maven repository and can be referenced from other maven modules