2016-10-19 58 views
0

我在下面的路径中有一个TEST123.class。Got NoClassDefFoundError:错误的Windows路径名称

d:/用户/ XXX /桌面/ SEM-材料工作/ SEM-材料工作/ SEM-材料freemarkerjob /目标/班/ COM /携程网/市场/ SEM/freemarkerjob/dynamicjava/

然后我运行下面的try子句来加载由URLClassLoader的类,但它给我的异常ava.lang.NoClassDefFoundError:TEST123(错误的名称:,如何解决异常

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(); 
      } 
+0

好像有Java类coflict。类URLClassLoader有两个或两个以上的实现。请检查可能有两个实现在不同的罐子。 –

+0

URLClassLoader来自包java.net.URLClassLoader;所以应该有一个实现。从错误消息“NoClassDefFoundError:TEST123(错误的名称:”,似乎我指定的路径是错误的,但我不知道如何解决它。 – Jason

+0

addurl upto目标/类和使用全限定类名称加载类 – hunter

回答

1

我认为你必须改变你的URL指向通过包名类路径和负载类,像这样

URLClassLoader mycl = new URLClassLoader(new URL[] { 
new URL("file:///D:/Users/XXX/Desktop/sem-material-job/sem-material-‌​job/sem-material-fre‌​emarkerjob/target/cl‌​asses/") }); 

Class c2 = mycl.loadClass("com.ctrip.market.sem.freemarkerjob.dynamicja‌​va.TEST123"); 
+0

如果我们可以将绝对路径文件更改为/// D:/ Users/XXX/Desktop/sem-material-job/sem-material-job/sem-material-freemarkerjob/target/classes /到相关路径,必须运行程序到Linux,所以Windows路径D:/ Users/XXX/..是无效的。 – Jason

+0

这取决于您的需求,有不同的方式来设置与plateforme相关的路径。 –

1

你试图加载类TEST123,但您的TEST123.class文件包含类com.ctrip.market.sem.freemarkerjob.dynamicjava.TEST123。第一行中的包是什么?将您的代码更改为

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"); 

应该有效。

+0

Ye s,你和andolsi给出了正确的答案,非常感谢你。 – Jason

相关问题