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:从编译中排除目标/生成源的主要内容,如果未能解决你的问题,请参考以下文章