Maven - как обрабатывать сгенерированные классы
Моя дилемма в том, что у меня есть сомнения относительно сгенерированных исходных файлов в maven.
Я пытаюсь создать некоторые классы из WSDL, и я действительно не знаю, что является стандартным способом обработки полученных исходных файлов.
- Где я должен генерировать исходные файлы .java? (src/main/java, src/main/сгенерировано)
- Должен ли я включать их под контролем источника или создавать их после регистрации
- Если я не использую папку src/main/java, как убедить Eclipse автоматически "видеть" эти классы в качестве исходной папки?
- Мне действительно нужны файлы .java или только .class-es?
Каковы наилучшие практики в отношении этой проблемы? Любая помощь или совет приветствуются.
Спасибо за ваши добрые ответы,
Марк
Ответы
Ответ 1
Большинство плагинов Maven Я столкнулся с тем, что генерировать код следует за соглашением о размещении сгенерированных исходных файлов Java в sub -каталог папки target/generated-sources
. Например, Maven 2 JAXB 2.x Plugin генерирует источники Java в папке target/generated-sources/xjc
.
Пока сборка повторяется, я не вижу необходимости передавать сгенерированные источники в репозиторий исходного кода. Поэтому я обычно настраиваю Git, Mercurial, SVN или что бы я ни использовал, чтобы игнорировать все под target
.
Обычно я вручную редактирую файл .classpath
, чтобы включить исходную папку для Eclipse, и я сохраняю как .classpath
, так и .project
в репозитории исходного кода.
Вот пример:
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources"/>
<classpathentry kind="src" path="target/generated-sources/xjc"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
<classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
<classpathentry kind="output" path="target/classes"/>
</classpath>
Важно отметить, что некоторые плагины Maven не прикрепляют сгенерированные источники к POM. Вы можете использовать Build Helper Maven Plugin, чтобы это произошло.
Ответ 2
Я не нашел стандартный способ обработки полученных исходных файлов. Однако, исходя из моего опыта, я бы рекомендовал вам следующее:
- Где я должен генерировать исходные файлы .java? (SRC/Основной/Java, SRC/основной/генерируется)
- Я помещаю их в файл src/main/com/mypackage/. Таким образом, они уже находятся в пути к классам, и вам не понадобится какая-либо другая конфигурация вручную, чтобы компиляция Eclipse без ошибок.
- Должен ли я включать их под контролем источника или создавать их после регистрации
- Я использовал, чтобы НЕ включать их, но после некоторых проблем (разработчики не генерировали их, потому что они забыли, отсутствовали плагин IDE Maven и т.д.) мы в конечном итоге добавив их в исходное управление. Этот помог всем понять, что есть пакет сгенерированных источников, которые не отображаются волшебным образом, быстро проверяют изменения схем, просто исследуя папку (некоторые исходные файлы больше не существуют и т.д.) И видят реальный размер приложение.
- Если я не использую папку src/main/java, как убедить Eclipse автоматически "видеть" эти классы в качестве исходной папки?
- Решено с помощью src/main/com/mypackage/сгенерировано.
- Мне действительно нужны файлы .java или только .class-es?
- Я бы предложил использовать файлы .java.
Только мои два цента, после многих лет использования JAXB, в основном для WSDL для генерации Java.
Ответ 3
Вот моя рекомендация после многих лет: Поместите все свое генерирование кода в отдельный проект maven и зависте от него в ваших обычных проектах, которым нужен сгенерированный код.
- Сделайте
mvn install
для сгенерированного кода, если он является SNAPSHOT.
- Если вы не знаете, что делаете, я не рекомендую помещать сгенерированный код в подмодуль, иначе Eclipse будет постоянно запутываться, потому что большинство людей импортирует все подмодули (т.е. многомодульный проект)
- Однако, если вы решите сделать мультимодуль (т.е. сгенерированный код является проектом для сестер), вы можете:
- В частности, не импортируйте проект в Eclipse и используйте
mvn install
в отдельном проекте
- Полагайтесь на плагины жизненного цикла m2e и плагин Build Helper (это хорошо работает только при определенном генерации кода, которое сильно поддерживается).
- Если вам нужно отлаживать сгенерированный код, я настоятельно рекомендую добавить источники в банку с помощью плагина maven-attach-sources.
В то время как многомодульный подход кажется на практике хорошей идеей, он просто становится действительно раздражающим, потому что Eclipse будет выходить из синхронизации каждый раз, когда вы натягиваете, если есть новый SNAPSHOT.
Если ваш сгенерированный код не сгенерирован, а затем просто отпустите его, чтобы он не был SNAPSHOT (очевидно, для этого требуется создание правильного репозитория maven).