Maven: исключить целевые / созданные источники из компиляции
Этот вопрос, просто чтобы убедиться, что моя интерпретация верна:
Я использую плагин Mojohaus jaxb2-maven-plugin для генерации классов Java из файлов.xsd, и по умолчанию он помещает их в целевой / созданный источник
Теперь я хочу отследить эти классы в управлении исходным кодом (цель, конечно, исключена), и я могу однажды слегка настроить один с помощью аннотации или строки кода, и я даже могу изменить свой плагин для генерации классов, так что я копирую эти классы и пакеты в src/main/java
Это расстраивает Maven, когда я пытаюсь скомпилировать, потому что он рассматривает "target/generate-sources" как исходный каталог, и он находит все предложения дважды. Насколько я понимаю, я могу исключить классы внутри исходного каталога, но я не могу удалить исходный каталог из сборки Maven, я прав?
Таким образом, единственным решением было бы настроить мой плагин jaxb2 для генерации классов в другом месте, верно?
ОБНОВЛЕНИЕ:
Хорошо, это не работает, как я думал, если я изменю outputDirectory моего плагина jaxb, он все равно будет включен в качестве исходного каталога Maven, и я понятия не имею, почему.
<configuration>
<outputDirectory>${project.build.directory}/tatata/jaxb</outputDirectory>
</configuration>
ОБНОВЛЕНИЕ 2: Объяснение заключается в том, что плагин добавляет outputDirectory в качестве исходного каталога maven во время фазы создания источников, и он не является дополнительным или настраиваемым.
3 ответа
Перво-наперво, не добавляйте код генерации в систему контроля версий. Не изменяйте это вручную. Вы попадете в беду. Поверьте мне, я видел это слишком много раз. Новая версия схемы, и вы потерялись.
Хорошо, теперь на ваш вопрос.
С maven-jaxb2-plugin
Вы можете отключить добавление директории генерации в качестве исходного корня компиляции с помощью:
<configuration>
<addCompileSourceRoot>false</addCompileSourceRoot>
</configuration>
Отказ от ответственности: я автор maven-jaxb2-plugin
,
Ответ от Lexicore - интересный вывод, но мой вопрос был о плагине, который я сейчас использую, а не о том, как это сделать с другим плагином.
Итак, вот обходной путь для плагина Mojohaus: вы можете просто пропустить источник генерации по умолчанию (нет необходимости выполнять эту задачу при каждой сборке, когда ваша модель изменяется один раз в неделю, затем один раз в год), и запускать ее только при необходимости с помощью специального профиля maven: как пропустить генерируемые источники в Maven
Вы всегда можете указать целевой каталог (generateDirectory) в файле конфигурации pom, как показано ниже. Надеюсь, поможет
`
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>0.12.3</version>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<configuration>
<schemaLanguage>WSDL</schemaLanguage>
<generateDirectory>${basedir}/src/main/java</generateDirectory>
<generatePackage>com.myproj.proxy</generatePackage>
<schemas>
<schema>
<!-- <url>${project.basedir}/src/main/resources/wsdl/test.wsdl</url> -->
<fileset>
<!-- Defaults to schemaDirectory. -->
<directory>${basedir}/src/main/resources/wsdl</directory>
<!-- Defaults to schemaIncludes. -->
<includes>
<include>*.wsdl</include>
</includes>
</fileset>
</schema>
</schemas>
</configuration>
</plugin>
`