Maven:从编译中排除目标/生成源

时间:2018-03-05 17:08:07

标签: maven jaxb maven-3 jaxb2-maven-plugin

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

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

现在,我想在源代码控制中跟踪这些类(目标当然是排除在外),我可能有一天会稍微定制一个带有注释或代码行的类,我甚至可以更改我的类生成插件那么我在src / main / java

中复制这些类和包是什么呢?

当我尝试编译时,这会让Maven感到不安,因为他认为" target / generated-sources"作为源目录,他发现所有的clases两次。根据我的理解,我可以在源目录中排除类,但是我无法从Maven构建中删除源目录,我是对的吗?

所以唯一的解决方案是配置我的jaxb2插件以在别处生成类,对吧?

更新

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

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

更新2 :解释是插件在构建的generate-sources阶段将outputDirectory添加为maven源目录,并且它不是可选的或可自定义的。

3 个答案:

答案 0 :(得分:2)

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

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

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

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

免责声明:我是maven-jaxb2-plugin的作者。

答案 1 :(得分:0)

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

所以这里是Mojohaus插件的解决方法:默认情况下你可以跳过generate-sources(当你的模型在一周内改变一次,然后在一年内改变一次时,不需要在每次构建时执行此任务),以及仅在需要时使用专用的maven配置文件触发它:How to skip generate-sources in Maven

答案 2 :(得分:-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>

`