1
我實現了一個Annotation Processor,我試圖加載一個被當前正在處理的文件的嵌套元素引用的類,例如方法的返回類型。如何從eclipse中的註釋處理器加載類?
當我使用javac從命令行運行此代碼並傳遞當前項目classpath時,它成功運行,但是在使用eclipse時,我得到一個ClassNotFoundException異常。看下面的例子:
public class MyAnnotationProcessor extends AbstractProcessor {
@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
for (TypeElement element : annotations) {
try {
TypeElement type = getMethodReturnType(element);
Class<?> class1 = Class.forName(type.getQualifiedName().toString());
// ..
// do some processing with class1
// ...
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
return false;
}
我發現在eclipse中處理器沒有當前項目的類路徑。我可以創建一個URLClassLoader來加載這些必需的類,但是無法找到獲取當前項目路徑的方法。
有沒有辦法從註解處理器獲取項目路徑?
嗯,類路徑和源路徑設置會自動傳遞給註釋處理器基於項目設置,所以問題可能與您的項目設置本身有關。你確定你已經爲你的項目啓用了註釋處理嗎? –
是的,我非常確定註釋處理已啓用,對於沒有類需要加載的文件,它工作正常。 Eclipse提到了你說的話,但似乎沒有這樣做: >注意:諸如「-classpath」和「-sourcepath」之類的選項會自動傳遞給所有處理器,其值與項目的Java設置相對應。 當我從處理器中獲取類路徑時,使用系統屬性它只會從eclipse返回jar,而從處理器的類加載器中我只能得到eclipse的路徑。我正在與eclipse Mars @SasikanthBharadwaj合作 – Abraham