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>

`

Другие вопросы по тегам