Got NoClassDefFoundError: wrong name with Windows path
Got NoClassDefFoundError: wrong name with Windows path
我在下面的路径中有一个TEST123.class。
D:/Users/XXX/Desktop/sem-material-job/sem-material-job/sem-material-freemarkerjob/target/classes/com/ctrip/market/sem/freemarkerjob/dynamicjava/
然后我 运行 下面的 try 子句通过 URLClassLoader 加载 class ,但是它给了我异常 ava.lang.NoClassDefFoundError: TEST123 (wrong name:, how to solve the exception ?
ava.lang.NoClassDefFoundError: TEST123 (wrong name: com/ctrip/market/sem/freemarkerjob/dynamicjava/TEST123)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
try {
URLClassLoader mycl = new URLClassLoader(new URL[] { new URL(
"file:///D:/Users/XXX/Desktop/sem-material-job/sem-material-job/sem-material-freemarkerjob/target/classes/com/ctrip/market/sem/freemarkerjob/dynamicjava/") });
Class c2 = mycl.loadClass("TEST123");
} catch (Exception e) {
e.printStackTrace();
}
您正在尝试加载 class TEST123
,但您的 TEST123.class
文件包含 class com.ctrip.market.sem.freemarkerjob.dynamicjava.TEST123
。 TEST123.java
第一行的包是什么?将代码更改为
URLClassLoader mycl = new URLClassLoader(new URL[] {
new URL("file:///D:/Users/XXX/Desktop/sem-material-job/sem-material-job/sem-material-freemarkerjob/target/classes/") });
Class c2 = mycl.loadClass("com.ctrip.market.sem.freemarkerjob.dynamicjava.TEST123");
应该可以。
我认为你必须更改 URL 以指向 class 路径并按包名称加载 class,像这样
URLClassLoader mycl = new URLClassLoader(new URL[] {
new URL("file:///D:/Users/XXX/Desktop/sem-material-job/sem-material-job/sem-material-freemarkerjob/target/classes/") });
Class c2 = mycl.loadClass("com.ctrip.market.sem.freemarkerjob.dynamicjava.TEST123");
我在下面的路径中有一个TEST123.class。
D:/Users/XXX/Desktop/sem-material-job/sem-material-job/sem-material-freemarkerjob/target/classes/com/ctrip/market/sem/freemarkerjob/dynamicjava/
然后我 运行 下面的 try 子句通过 URLClassLoader 加载 class ,但是它给了我异常 ava.lang.NoClassDefFoundError: TEST123 (wrong name:, how to solve the exception ?
ava.lang.NoClassDefFoundError: TEST123 (wrong name: com/ctrip/market/sem/freemarkerjob/dynamicjava/TEST123)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
try {
URLClassLoader mycl = new URLClassLoader(new URL[] { new URL(
"file:///D:/Users/XXX/Desktop/sem-material-job/sem-material-job/sem-material-freemarkerjob/target/classes/com/ctrip/market/sem/freemarkerjob/dynamicjava/") });
Class c2 = mycl.loadClass("TEST123");
} catch (Exception e) {
e.printStackTrace();
}
您正在尝试加载 class TEST123
,但您的 TEST123.class
文件包含 class com.ctrip.market.sem.freemarkerjob.dynamicjava.TEST123
。 TEST123.java
第一行的包是什么?将代码更改为
URLClassLoader mycl = new URLClassLoader(new URL[] {
new URL("file:///D:/Users/XXX/Desktop/sem-material-job/sem-material-job/sem-material-freemarkerjob/target/classes/") });
Class c2 = mycl.loadClass("com.ctrip.market.sem.freemarkerjob.dynamicjava.TEST123");
应该可以。
我认为你必须更改 URL 以指向 class 路径并按包名称加载 class,像这样
URLClassLoader mycl = new URLClassLoader(new URL[] {
new URL("file:///D:/Users/XXX/Desktop/sem-material-job/sem-material-job/sem-material-freemarkerjob/target/classes/") });
Class c2 = mycl.loadClass("com.ctrip.market.sem.freemarkerjob.dynamicjava.TEST123");