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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Maven:从编译中排除目标/生成源相关的知识,希望对你有一定的参考价值。

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

我正在使用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源目录,并且它不是可选的或可自定义的。

答案

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


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

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

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

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

另一答案

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

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

另一答案

你总是可以在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>

`

以上是关于Maven:从编译中排除目标/生成源的主要内容,如果未能解决你的问题,请参考以下文章

从代码覆盖中排除生成的源而不影响整体代码覆盖

在基于 NetBeans Maven 的项目中,在编程和编译时包含一个库,但从构建中排除

从 Eclipse 的搜索结果中排除目标文件夹

在声纳中排除生成的代码

如何从 maven 项目中自动排除未使用的 jar 文件?

我想用 CMake 生成和编译 Visual Studio 项目我需要从构建中排除单元测试文件。有没有办法做到这一点?