2015-04-27 115 views
1

當與javax.annotation.processing.AbstractProcessorjavax.annotation.processing.AbstractProcessor:編譯器生成的代碼

(...) 
FileObject file=filer.createResource(StandardLocation.CLASS_OUTPUT,"xx","Hello.java"); 
PrintWriter writer=new PrintWriter(file.openWriter()); 
writer.println("package xx;\npublic class Hello { }"); 
writer.close(); 
(...) 

我應該運行javac第二時間生成Java代碼來編譯所生成的代碼或是否有一劈告訴javac的編譯新課程在飛行中?

回答

1

如果您使用createSourceFile方法,那麼您的新來源應該爲您編譯。您的「創造」的方法應該如下所示:

FileObject file = filer.createSourceFile("xx.Hello"); 

如果現有的一些元素「引起的」這個得到生成的,你應該把它添加到createSourceFile呼叫是originatingElement

+0

嗡嗡聲,沒有類Hello沒有編譯,除非我在'javac文件中聲明它是一個字段' – Pierre

+0

對不起,我錯過了你也在使用''createResource'' - 你會想要使用''' createSourceFile''除了指定SOURCE_OUTPUT的位置。 – jbunting

+0

而且......我從內存中操作......答案更新爲一個測試示例。 – jbunting