I can't get yGuard to work with any external dependencies. All cases i'm getting error like NoSuchMappingException: No mapping found for: Class com.fasterxml.jackson.databind.ObjectMapper
.
My code:
Main class:
public class Main {
public static void main(String[] args) throws Exception {
SomeObj someObj = new SomeObj(2, "Hello");
SomeClass someClass = new SomeClass();
someClass.print(someObj);
}
}
SomeObj:
Just POJO with 2 fields: Integer integerValue
& String stringValue
.
SomeClass:
public class SomeClass {
private ObjectMapper mapper = new ObjectMapper();
public void print(SomeObj someObj) throws JsonProcessingException {
System.out.println(mapper.writeValueAsString(someObj));
}
}
pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>fsdfsfsd</groupId>
<artifactId>fsdfsfsd</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<mainclass>com.mycompany.Main</mainclass>
<jackson.version>2.9.9</jackson.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>${mainclass}</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>run</goal>
</goals>
<id>obfuscate</id>
<configuration>
<target>
<property name="runtime_classpath"
refid="maven.runtime.classpath"/>
<taskdef name="yguard" classname="com.yworks.yguard.YGuardTask"
classpath="${runtime_classpath}"/>
<yguard>
<inoutpair
in="${project.build.directory}/${project.build.finalName}.jar"
out="${project.build.directory}/${project.build.finalName}_obfuscated.jar" />
<externalclasses>
<pathelement location="${maven.dependency.com.fasterxml.jackson.core.jackson-core.jar.path}"/>
<pathelement location="${maven.dependency.com.fasterxml.jackson.core.jackson-databind.jar.path}"/>
</externalclasses>
<shrink logfile="${project.build.directory}/yshrink.log.xml">
<property name="error-checking" value="pedantic"/>
<keep>
<method name="void main(java.lang.String[])" class="com.mycompany.Main" />
<class classes="public"/>
</keep>
</shrink>
<rename mainclass="com.mycompany.Main" logfile="${project.build.directory}/yguard.log.xml">
<property name="error-checking" value="pedantic"/>
<keep>
<class classes="public"/>
</keep>
</rename>
</yguard>
</target>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.yworks</groupId>
<artifactId>yguard</artifactId>
<version>3.0.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
And after mvn clear compile package
i'm always getting in yguard.log.xml
exception which starting this:
An exception has occured.
com.yworks.yguard.obf.NoSuchMappingException: No mapping found for: Class com.fasterxml.jackson.databind.ObjectMapper
com.yworks.yguard.obf.NoSuchMappingException: No mapping found for: Class com.fasterxml.jackson.databind.ObjectMapper
at com.yworks.yguard.obf.ClassTree.mapClass(ClassTree.java:951)
at com.yworks.yguard.obf.ClassTree.mapDescriptor(ClassTree.java:1450)
at com.yworks.yguard.obf.classfile.ClassFile.remap(ClassFile.java:1107)
at com.yworks.yguard.obf.GuardDB.remapTo(GuardDB.java:382)
I've tried to made point-to-point like in official example, but i have no ideas what i'm doing wrong
Any ideas? Thanks a lot for tips