В моем приложении Java У меня есть класс FooСгенерированный источник Java с отражением
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, но это было бы громоздким.
Фактический прецедент, который мне нужен для этого, генерирует BindingAnnotations для Google Guice (который будет использоваться в источнике GWT, поэтому они должны существовать как .java-файлы во время компиляции).
Я немного посмотрел в Velocity, но не смог понять, как получить отражающую информацию из моего класса из шаблона (имена полей) при запуске из сборки maven. GWTP выглядит очень интересным проектом, и мне придется его больше проверять. Похоже, что возможно, хотя и сложно, чтобы генератор запускался из сборки Maven (http://groups.google.com/group/gwt-platform/browse_thread/thread/cad03cb1a7b98c9e/d060ebd4c26b4534) – idle
Я беспокоюсь, что я могут возникнуть проблемы, которые сгенерированный файл Field1.java будет связан статически другими источниками для компиляции (т. е. привязка в модуле guice), поэтому генерация источников должна происходить до нормальной компиляции. Вы знаете, может ли GWTP это сделать? – idle
@ user460976 Я не думаю, что они могут. Я считаю, что обработка аннотаций происходит непосредственно перед компиляцией, и поэтому она работает, но пока вы не скомпилировали код, сгенерированный код тоже не присутствует. В первый раз, когда вы захотите это использовать, вам необходимо аннотировать код и затем скомпилировать его так, чтобы сгенерированные файлы были созданы. –