这个问题,只是为了确保我的解释是正确的:
我使用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源目录,并且它不是可选的或可自定义的。
答案 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>
`