我无法让 yGuard 处理任何外部依赖项。所有情况下我都会遇到错误,例如NoSuchMappingException: No mapping found for: Class com.fasterxml.jackson.databind.ObjectMapper
.
我的代码:
主类:
public class Main {
public static void main(String[] args) throws Exception {
SomeObj someObj = new SomeObj(2, "Hello");
SomeClass someClass = new SomeClass();
someClass.print(someObj);
}
}
一些对象:
只是带有 2 个字段的 POJO:Integer integerValue
& String stringValue
。
某类:
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>
在mvn clear compile package
我总是遇到yguard.log.xml
异常之后:
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)
我试图像在官方示例中那样进行点对点,但我不知道我做错了什么
有任何想法吗?非常感谢提示