2014-01-24 2 views
3

У меня есть плагин Maven, который генерирует источники для моего проекта java и помещает их в 'целевых/сгенерированных источников'. Мне нужны эти источники во время компиляции. Я хочу, чтобы их в моем проекте изменяли, уже сгенерировали. И, конечно, я хочу поместить их в нужную папку под «src», а не в «целевых/сгенерированных источников». Как я могу организовать это с помощью Maven?Как организовать генерацию исходного кода в Maven?

Другими словами, я хочу быть в состоянии:

  1. генерировать источники мне нужно, запустив какой-то цели моего специального источника генерирующим плагин (уже сделано, источники есть пакет, который указал)

  2. переместить эти сгенерированные источники в 'src/main/java/...' папка стандартного макета Maven.

  3. удалить их из 'целевых/сгенерированных источников', потому что в противном случае команда mvn clean install вызывает ошибку, которая говорит, что у меня есть «дублирующий класс». Действительно, если я просто копирую сгенерированные источники из target в src - у меня есть классы с одинаковым именем и пакетом, хотя один из них находится в целевой папке.

Какие плагины Maven могут с этим работать? Полагаю, это типичная задача.

+0

Было бы полезно увидеть соответствующую конфигурацию вашего pom.xml. – Behe

+0

Этот плагин разработан вами? – MariuszS

+1

Это не типично, потому что все сгенерированные вещи должны попасть в целевую папку. Легко чистить сгенерированные файлы, а также отделять то, что проверяется в системе управления версиями. – Henry

ответ

3

Стандартное решение в мавена, чтобы генерировать все источник в target/generated-sources, весь исходный код из target/generated-sources и от src компилируется в target/classes и объединены в целевой банку.

Плагин никогда не должен касаться файлов под каталогом src, поскольку эти файлы управляются системой управления версиями (например, git).

Если плагин плохо написана и исходные файлы из target/generated-sources автоматически не compilled в target, а затем использовать цель build-helper:add-source из Build Helper Maven Plugin как сказал @James Kingsbery.

В maven-com4j-plugin исходном коде есть комментарии:

/** 
    * Directory in which to create the Java COM wrapper files. This directory 
    * will be added to the Maven project's compile source directory list and 
    * will therfore be auto-compiled when the Maven compile phase is run. 
    * 
    * @parameter expression="${outputDirectory}" 
    *   default-value="${project.build.directory}/generated-sources/com4j/java" 
    */ 

Более важная часть и решение вашей проблемы:

Этот каталог будет добавлен в каталог источника компиляции проекта Maven в список и будут автоматически скомпилированы, когда выполняется фаза компиляции Maven

Итак, сгенерированный исходный код должен быть автоматически скомпилирован и заархивирован в сборку jar.

0

Если ваш плагин работает правильно, он добавит сгенерированные источники во внутренний проект и другие плагины, такие как maven-compiler-plugin, который подберет его и скомпилирует код Generatd.

В коде плагина вы можете сделать это, используя что-то подобное:

mavenProject.addCompileSourceRoot(getOutputDirectory().getAbsolutePath()); 
Смежные вопросы