在我的Java應用程序生成的Java源我有一類Foo與反思
class Foo {
String field1;
String field2;
}
我想有一個使用上的字段反映在這個類 (虛模板語言)的一些生成的代碼
#for each Field $f in Foo.class.getDeclaredFields()
#writeFile $f.java
public @interface $f {
}
最終目標是讓Field1.java和Field2.java在每個內部都有一個簡單的@interface定義。
是否有可用於Maven構建過程中的這一代的模板語言?
我能找到的最接近的是JET,但是這個項目似乎更適合於在運行時生成Java源代碼,而不是在編譯時。從理論上講,我可以使用AntRun以及一些Javac和Java任務來完成這項工作,但這會很麻煩。
我需要的實際用例是爲Google Guice生成BindingAnnotations(它將在GWT源代碼中使用,所以它們在編譯時必須以.java文件的形式存在)。
我對Velocity進行了一些研究,但是我無法弄清楚從Maven構建中運行時如何從模板(字段名稱)中從我的類獲取反射信息。 GWTP看起來像一個非常有趣的項目,我將不得不更多地檢查它。它看起來像是可能的,但具有挑戰性,讓發電機運行Maven構建(http://groups.google.com/group/gwt-platform/browse_thread/thread/cad03cb1a7b98c9e/d060ebd4c26b4534) – idle 2012-04-24 14:52:59
我擔心我可能會遇到生成的Field1.java文件將被其他源靜態鏈接以編譯的問題(即,在guice模塊中進行綁定),因此源的生成必須在正常編譯之前進行。你知道GWTP是否可以做到這一點? – idle 2012-04-24 14:54:13
@ user460976我不認爲他們可以。我相信註釋處理是在編譯之前發生的,因此它可以工作,但只要你沒有編譯代碼,生成的代碼也不存在。第一次你想使用它,你需要註釋代碼然後編譯它,以便生成生成的文件。 – 2012-04-24 14:57:50