0

这个问题,只是为了确保我的解释是正确的:

我正在使用 Mojohaus jaxb2-maven-plugin 从 .xsd 文件生成 java 类,默认情况下它将它们放在目标/生成源中

现在,我想在源代码控制中跟踪这些类(当然不包括目标),有一天我可能会用注释或一行代码稍微定制一个,我什至可能会更改我的类生成插件,那又如何做的是我将这些类和包复制到 src/main/java

当我尝试编译时,这让 Maven 感到不安,因为他将“目标/生成源”视为源目录,并且他两次找到所有类。据我了解,我可以排除源目录中的类,但我不能从 Maven 构建中删除源目录,对吗?

所以唯一的解决方案是配置我的 jaxb2 插件以在其他地方生成类,对吗?

更新

好的,这不像我想的那样工作,如果我更改我的 jaxb 插件的 outputDirectory,它仍然被 Maven 包含为源目录,我不知道为什么。

    <configuration>      
                <outputDirectory>${project.build.directory}/tatata/jaxb</outputDirectory>
    </configuration>

更新 2:解释是插件在生成源阶段将 outputDirectory 添加为 maven 源目录,它不是可选的或可定制的。

4

3 回答 3

3

首先,不要将生成代码添加到源代码管理中。不要手动修改。你会遇到麻烦。相信我,我已经看过太多次了。一个新版本的架构,你迷路了。


好的,现在回答你的问题。

您可以使用maven-jaxb2-plugin以下命令关闭将生成目录添加为编译源根目录:

<configuration>
    <addCompileSourceRoot>false</addCompileSourceRoot>
</configuration>

免责声明:我是maven-jaxb2-plugin.

于 2018-03-05T18:35:39.723 回答
0

Lexicore 的回答是一个有趣的线索,但我的问题是关于我目前正在使用的插件,而不是如何使用其他插件。

因此,这里是 Mojohaus 插件的解决方法:您可以默认跳过 generate-sources(当您的模型每周更改一次,然后每年更改一次时,无需在每次构建时执行此任务),并且仅触发它需要时使用专用的 Maven 配置文件:如何在 Maven 中跳过生成源

于 2018-03-05T21:11:07.100 回答
-2

您始终可以在 pom 配置文件中指定目标目录(generateDirectory),如下所示。希望能帮助到你

`

<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>

`

于 2018-03-05T17:15:08.587 回答