Maven - как обрабатывать сгенерированные классы - PullRequest
15 голосов
/ 14 октября 2011

Моя дилемма в том, что у меня есть сомнения относительно сгенерированных исходных файлов в maven.

Я пытаюсь сгенерировать некоторые классы из WSDL, и я действительно не знаю, каков стандартный способ обработкирезультирующие исходные файлы.

  • Где мне генерировать исходные файлы .java?(src / main / java, src / main / generate)
  • Должен ли я включить их под контроль исходного кода или разрешить их создание после проверки
  • Если я не использую src/ main / java folder, как убедить Eclipse автоматически «видеть» эти классы как исходную папку?
  • Действительно ли мне нужны файлы .java или только .class-es?

Каковы лучшие практики в этом вопросе?Приветствуется любая помощь или совет.

Спасибо за ваши добрые ответы, Марк

Ответы [ 3 ]

12 голосов
/ 14 октября 2011

Большинство плагинов Maven , с которыми я сталкивался, генерируют код в соответствии с соглашением о размещении сгенерированных исходных файлов Java в подкаталоге папки target/generated-sources. Например, плагин Maven 2 JAXB 2.x создает источники 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 , чтобы преодолеть это.

4 голосов
/ 20 августа 2015

Я никогда не нашел стандартного способа обработки полученных исходных файлов. Однако, исходя из моего опыта, я бы порекомендовал вам следующее:

  • Где мне генерировать исходные файлы .java? (SRC / Основной / Java, SRC / основной / генерируется)
  • Я помещаю их в src / main / com / mypackage / generate. Таким образом, они уже находятся в пути к классам, и вам не понадобится какая-либо другая ручная конфигурация , чтобы компилировать Eclipse без ошибок.
  • Должен ли я включить их в систему контроля версий или разрешить их создание после проверки
  • I раньше НЕ включал их , но после некоторых проблем (разработчики не генерировали их, потому что они забыли, отсутствие плагина IDE Maven и т. Д.) в итоге мы добавим их в систему контроля версий . Это помогло любому узнать, что существует пакет сгенерированных источников, которые не появляются волшебным образом, быстро проверить изменения схемы, просто исследуя папку (некоторые исходные файлы больше не существуют и т. Д.) И увидеть реальный размер приложение .
  • Если я не использую папку src / main / java, как убедить Eclipse автоматически «видеть» эти классы как исходную папку?
  • Решено с помощью src / main / com / mypackage / Генерируемый.
  • Мне действительно нужны файлы .java или только .class-es?
  • Я бы предложил использовать файлы .java.

Просто мои два цента, после многих лет использования JAXB, в основном для генерации WSDL-Java.

0 голосов
/ 19 августа 2016

Вот моя рекомендация спустя много лет: Поместите всю генерацию кода в отдельный проект maven и полагайтесь на него в своих обычных проектах, которым требуется сгенерированный код.

  • Сделайте mvn install для вашего сгенерированного кода, если это SNAPSHOT.
  • Если вы не знаете, что делаете, я не рекомендую помещать сгенерированный код в подмодуль, иначе Eclipse будет постоянно путаться, потому что большинство людей импортируют все подмодули (т.е. многомодульный проект)
  • Однако Если вы решили сделать многомодульный (т.е. сгенерированный код - это родственный проект), вы можете:
    • Специально не импортировать проект в Eclipse и использовать mvn install для отдельного проекта
    • Положитесь на плагины жизненного цикла m2e и плагин Build Helper (это хорошо работает только при определенной генерации кода, которая активно поддерживается).
  • Если вам нужно отладить сгенерированный код, я настоятельно рекомендую подключать исходники к банке с помощью плагина maven-attach-sources .

Хотя многомодульный подход кажется хорошей идеей на практике, он просто становится действительно чертовски раздражающим, потому что Eclipse будет синхронизироваться каждый раз, когда вы тянете, если появляется новый SNAPSHOT.

Если ваш сгенерированный код генерируется не так часто, просто отпустите его, чтобы он не был SNAPSHOT (очевидно, для этого требуется настройка надлежащего репозитория maven).

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