Java Maven JAXB插件只执行一个执行
我试图从两个Java Maven JAXB插件只执行一个执行,java,maven,jaxb,maven-3,maven-jaxb2-plugin,Java,Maven,Jaxb,Maven 3,Maven Jaxb2 Plugin,我试图从两个XSD模式生成源代码。我的JAXBmaven插件如下所示: <plugin> <groupId>org.jvnet.jaxb2.maven2</groupId> <artifactId>maven-jaxb2-plugin</artifactId> <version>0.8.2</version> <executions> <execu
XSD
模式生成源代码。我的JAXB
maven插件如下所示:
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>0.8.2</version>
<executions>
<execution>
<id>GenerateKenexa</id>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<schemaDirectory>src/main/resources/xsd</schemaDirectory>
<schemaIncludes>
<include>KenexaXMLConfiguration.xsd</include>
</schemaIncludes>
<generatePackage>com.groupgti.onlinetest.kenexa.jaxb</generatePackage>
<generateDirectory>${project.build.directory}/generated-sources/kenexa</generateDirectory>
</configuration>
</execution>
<execution>
<id>GenerateTalentQ</id>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<schemaDirectory>src/main/resources/xsd</schemaDirectory>
<schemaIncludes>
<include>TalentQXMLConfiguration.xsd</include>
</schemaIncludes>
<generatePackage>com.groupgti.onlinetest.talentq.jaxb</generatePackage>
<generateDirectory>${project.build.directory}/generated-sources/talentq</generateDirectory>
</configuration>
</execution>
</executions>
</plugin>
com.sun.tools.xjc.maven2
maven jaxb插件
1.1.1
生殖灌肠
生成
**/jaxb-bindings-kenexa.xml
**/KenexaXMLConfiguration.xsd
GenerateTalentQ
生成
**/jaxb-bindings-talentq.xml
**/TalentQXMLConfiguration.xsd
第一个可以很好地生成。但第二个没有。我在maven输出中看到:
[INFO]——maven jaxb插件:1.1.1:generate(GenerateKenexa)@online.tests.management---
[信息]编译文件:/D:/Projects/GTIWebApplications/gti_online_tests_management/src/main/resources/xsd/KenexaXMLConfiguration.xsd
[信息]将输出写入D:\Projects\gtiWebApplication\gti\u online\u tests\u management\target\generated sources\xjc
[信息]
[信息]---maven jaxb插件:1.1.1:generate(GenerateTalentQ)@online.tests.management---
[信息]文件是最新的
它说文件是最新的,但它们甚至没有生成。可能有什么问题?首先,我建议为每个xsd
${basedir}/target/generated sources/xjc指定单独的输出文件夹
第二,尝试将其设置为单独的插件条目,不单独执行:
<plugin>
<groupId>com.sun.tools.xjc.maven2</groupId>
...
<includeSchema>**/KenexaXMLConfiguration.xsd...
...
</plugin>
<plugin>
<groupId>com.sun.tools.xjc.maven2</groupId>
...
<includeSchema>**/TalentQXMLConfiguration.xsd...
...
</plugin>
com.sun.tools.xjc.maven2
...
**/KenexaXMLConfiguration.xsd。。。
...
com.sun.tools.xjc.maven2
...
**/TalentQXMLConfiguration.xsd。。。
...
我解决了这个问题。我已经将mavenjaxb
插件更改为mavenjaxb2
插件,现在一切正常。现在,我的maven配置如下所示:
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>0.8.2</version>
<executions>
<execution>
<id>GenerateKenexa</id>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<schemaDirectory>src/main/resources/xsd</schemaDirectory>
<schemaIncludes>
<include>KenexaXMLConfiguration.xsd</include>
</schemaIncludes>
<generatePackage>com.groupgti.onlinetest.kenexa.jaxb</generatePackage>
<generateDirectory>${project.build.directory}/generated-sources/kenexa</generateDirectory>
</configuration>
</execution>
<execution>
<id>GenerateTalentQ</id>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<schemaDirectory>src/main/resources/xsd</schemaDirectory>
<schemaIncludes>
<include>TalentQXMLConfiguration.xsd</include>
</schemaIncludes>
<generatePackage>com.groupgti.onlinetest.talentq.jaxb</generatePackage>
<generateDirectory>${project.build.directory}/generated-sources/talentq</generateDirectory>
</configuration>
</execution>
</executions>
</plugin>
org.jvnet.jaxb2.maven2
maven-jaxb2-plugin
0.8.2
生殖灌肠
生成
src/main/resources/xsd
KenexaXMLConfiguration.xsd
com.groupgti.onlinetest.kenexa.jaxb
${project.build.directory}/generated sources/kenexa
GenerateTalentQ
生成
src/main/resources/xsd
TalentQXMLConfiguration.xsd
com.groupgti.onlinetest.talentq.jaxb
${project.build.directory}/generated sources/talentq
对于像我一样在一年后提出这个问题的人:/
这个问题同样存在于maven-jaxb2-plugin中,它可能是0.8.3中的某种bug。
当您将文件生成到同一目录中时,插件“认为”文件已经生成,并跳过第二次执行
我发现为了生成第二次执行,必须设置参数
<forceRegenerate>true</forceRegenerate>
true
在配置部分。我正在使用jaxb2,但在到达这里时仍然面临问题。我从其他人的答案中将下面的部分添加到配置中,现在它可以工作了。
对于前面的答案,成功的部分应该是:
<generateDirectory>${project.build.directory}/generated-sources/kenexa</generateDirectory>
${project.build.directory}/generated sources/kenexa
还需要一个唯一的执行id
<id>GenerateKenexa</id>
GenerateKenexa
但不同的目录使代码分为两个顶级包,因此我最后使用:
<forceRegenerate>true</forceRegenerate>
true
如果我将这些插件分成不同的插件,则只执行最后一个插件,不执行第一个插件,我的代码也不会编译。我应该在哪里加上这个?没有这样的元素可用。谢谢。同样的问题,同样的解决方案。当使用不同的目录时,您应该不再需要,至少在0.12.1版本的插件中不需要。