我創建了一個java註釋,它將我的一些'服務'類標記爲服務,然後編寫一個註釋處理器來生成相應的servicerequest和servicehandler類。這是一個GWT maven項目,在這個項目中,服務請求被髮送到服務器到中央調度程序,由各種服務處理。如何讓java註釋處理器讀取並處理來自projectA的註釋並生成projectB的java源文件
我的maven項目由一個父項目和5個子項目組成。
這個項目的結構是這樣的:
- MoodleMobile(父Maven項目)
- gwtMoodleWS(GWT層)
- moodleBuildSupport(包含註釋處理r)的
- moodleGeneratedServiceHandlers(生成的類的期望位置)
- moodleWS(服務器側層)
- moodleWSAPI的代碼(位置,其中註釋處理器將運行)
我的問題是這樣的。
使註解處理器讀取和處理來自一個項目(moodleWSAPI)的註釋並在另一個項目(moodleGeneratedServiceHandlers)中生成Java源文件的規定方式是什麼?
我看到很多很多註釋處理器的例子都是爲註釋處理器運行的同一個項目生成java源文件,但是不是用於不同的項目。
我已經成功地構建和測試了我的註釋處理器,但是我無法弄清楚如何讓它生成處理器運行的項目之外的文件。目前它生成的moodleWSAPI中的java源文件這是錯誤的)。我希望它在moodleWSAPI中處理源文件,然後在moodleGeneratedServiceHandlers中輸出新生成的源文件。
這裏是代碼片段,我要創建實際的Java源文件..
public void createSourceFileFromTemplate(Template template, ClassSignature classSignature, VelocityContext context, Element element) {
PrintWriter pw = null;
try {
JavaFileObject sourceFile = processingEnv.getFiler().createSourceFile(classSignature.getFullName(), classSignature.getElement());
OutputStream fileStream = sourceFile.openOutputStream();
pw = new PrintWriter(fileStream);
template.merge(context, pw);
} catch (Exception e) {
e.printStackTrace();
if (element!=null) {
processingEnv.getMessager().printMessage(Kind.ERROR, e.getMessage(),element);
} else {
processingEnv.getMessager().printMessage(Kind.ERROR, e.getMessage());
}
} finally {
if (pw!=null) {
pw.close();
}
}
}
請注意:ClassSignature是我來捕獲類的類名只是我的自定義類。我使用Velocity作爲我的模板引擎來生成實際的Java源代碼。
我在processEnv.getFiler()規範中沒有看到任何內容,它允許我指定項目之外的輸出。
我能去不使用processingEnv.getFiler()。createSourceFile(..)的路線,只是建立使用簡單的Java文件IO Java源文件。這將是很輕鬆的事,但我想行內的色彩,可以這麼說,並完成在規定的方式我的需要。有任何想法嗎 ?
我認爲你有一個很好的解決方案有,我可能會走這條路。我只需要編寫(或查找)一些基於完整類名創建文件的代碼。一旦完成,我就參加比賽。感謝您的建議。 – 2014-10-01 11:10:40