2012-04-24 2 views
2

В моем приложении 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-файлы во время компиляции).

ответ

0

Взгляните на Acceleo на основе шаблонов XSL для генерации исходного кода. Я использовал его с EMF для генерации исходного кода из модели данных, разработанной пользователем.

0

Я хотел бы предложить два варианта здесь:

  1. Apache Velocity: она обеспечивает язык шаблонов, глядя близко к тому, что вы описали. Посмотрите на него here. Вероятно, вас может заинтересовать их двигатель.

  2. GWTP похоже что-то похожее на то, что вы хотите сделать. Похоже, что они используют процессор аннотации для генерации своего кода. Вот processor example, а их проект - here.

+0

Я немного посмотрел в Velocity, но не смог понять, как получить отражающую информацию из моего класса из шаблона (имена полей) при запуске из сборки maven. GWTP выглядит очень интересным проектом, и мне придется его больше проверять. Похоже, что возможно, хотя и сложно, чтобы генератор запускался из сборки Maven (http://groups.google.com/group/gwt-platform/browse_thread/thread/cad03cb1a7b98c9e/d060ebd4c26b4534) – idle

+0

Я беспокоюсь, что я могут возникнуть проблемы, которые сгенерированный файл Field1.java будет связан статически другими источниками для компиляции (т. е. привязка в модуле guice), поэтому генерация источников должна происходить до нормальной компиляции. Вы знаете, может ли GWTP это сделать? – idle

+0

@ user460976 Я не думаю, что они могут. Я считаю, что обработка аннотаций происходит непосредственно перед компиляцией, и поэтому она работает, но пока вы не скомпилировали код, сгенерированный код тоже не присутствует. В первый раз, когда вы захотите это использовать, вам необходимо аннотировать код и затем скомпилировать его так, чтобы сгенерированные файлы были созданы. –

Смежные вопросы