在我的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