2012-07-18 44 views
0

我有以下代碼。它適用於加載我指出的TestSuiteSample類。 TestSuiteSample只是一個帶註釋的標準JUnit4測試套件。作爲正常的java項目運行,這將打印「true」,但在eclipse rcp下運行,這將打印「false」。任何想法爲什麼?無法檢查日食rcp類加載器中的註釋

File testSuiteDir = new File("D:/TestDir/"); 
URL classUrl; 
classUrl = testSuiteDir.toURI().toURL(); 
URL[] classUrls = { classUrl }; 
URLClassLoader ucl = new URLClassLoader(classUrls); 
Class<?> cls = ucl.loadClass("TestSuiteSample"); 

if (cls.isAnnotationPresent(SuiteClasses.class)) { 
    System.out.println("true"); 
} else { 
    System.out.println("false"); 

}

我想這一個在CLS檢查註釋,但仍返回0註釋。

Annotation[] annotations = new TestClass(clazz).getAnnotations(); 
for (Annotation annotation : annotations) { 
    System.out.println(annotation.annotationType().getName()); 
} 
+0

我在創建新的URLClassLoader時添加了這一個 this.getClass()。getClassLoader()。我不太確定Thread.getCurrentThread()。getContextClassLoader是否與此一樣。 – jantox 2012-07-18 07:28:37

回答

0

問題是SuiteClasses類是從一個不相關的ClassLoader未來不是從URLClassLoader您使用加載要測試的類。如果您將URLClassLoader的父代作爲綁定或線程上下文ClassLoader,那麼它應該解析爲相同的類。

+0

糾正我,如果我錯了。輸入父類加載器將指向SuiteClasses的正確類。 – jantox 2012-07-18 08:30:51

+1

您希望通過您加載類的相同ClassLoader鏈來解析SuiteClass,否則它們位於兩個不同的世界中,並且無法比較類對象。這就是爲什麼你需要將正常的類加載器鏈接到你的URLClassLoader。 – 2012-07-18 08:33:54