2012-08-31 57 views
5

我正试图从两个XSD模式生成源代码。我的JAXB maven插件看起来像这样:Maven JAXB插件只执行一次执行

<plugin> 
    <groupId>com.sun.tools.xjc.maven2</groupId> 
    <artifactId>maven-jaxb-plugin</artifactId> 
    <version>1.1.1</version> 
    <executions> 
     <execution> 
      <id>GenerateKenexa</id> 
      <goals> 
       <goal>generate</goal> 
      </goals> 
      <configuration> 
       <includeBindings> 
        <includeBinding>**/jaxb-bindings-kenexa.xml</includeBinding> 
       </includeBindings> 
       <includeSchemas> 
        <includeSchema>**/KenexaXMLConfiguration.xsd</includeSchema> 
       </includeSchemas> 
      </configuration> 
     </execution> 
     <execution> 
      <id>GenerateTalentQ</id> 
      <goals> 
       <goal>generate</goal> 
      </goals> 
      <configuration> 
       <includeBindings> 
        <includeBinding>**/jaxb-bindings-talentq.xml</includeBinding> 
       </includeBindings> 
       <includeSchemas> 
        <includeSchema>**/TalentQXMLConfiguration.xsd</includeSchema> 
       </includeSchemas> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

第一个生成正常。但第二个不是。我看到在maven输出:

[INFO] --- maven-jaxb-plugin:1.1.1:generate (GenerateKenexa) @ online.tests.management --- 
[INFO] Compiling file:/D:/Projects/GTIWebApplications/gti_online_tests_management/src/main/resources/xsd/KenexaXMLConfiguration.xsd 
[INFO] Writing output to D:\Projects\GTIWebApplications\gti_online_tests_management\target\generated-sources\xjc 
[INFO] 
[INFO] --- maven-jaxb-plugin:1.1.1:generate (GenerateTalentQ) @ online.tests.management --- 
[INFO] files are up to date 

它说文件是最新的,但他们甚至没有生成。什么可能是错的?

回答

4

我解决了这个问题。我已将maven jaxb插件更改为maven jaxb2插件,现在一切正常。现在我的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> 
+0

谢谢。同样的问题,同样的解 –

1

首先,我会建议为每个XSD <outputdirectory>${basedir}/target/generated-sources/xjc</outputdirectory>

其次指定单独的输出文件夹,尝试将其设置为单独的插件项,没有单独的执行:

<plugin> 
    <groupId>com.sun.tools.xjc.maven2</groupId> 
... 
<includeSchema>**/KenexaXMLConfiguration.xsd... 
... 
</plugin> 
<plugin> 
    <groupId>com.sun.tools.xjc.maven2</groupId> 
... 
<includeSchema>**/TalentQXMLConfiguration.xsd... 
... 
</plugin> 
+0

如果我将这些插入到不同的插件中,只有最后一个被执行,第一个不执行,并且我的代码不能编译。我应该在哪里添加?没有这样的元素可用。 –

11

对于进来的人对这个问题和我一样,一年后:/

的问题仍然存在Maven的JAXB2-插件藏汉,它可能是某种0.8.3中的bug。 当您将文件生成到同一目录中时,插件“认为”文件已经全部生成并跳过第二次执行。

我发现,为了产生第二个执行,你将不得不设置参数

<forceRegenerate>true</forceRegenerate> 

在配置部分。

1

我在使用jaxb2的同时仍然面临着问题,当我到达这里时。我将下面的代码添加到其他人的配置中,现在可以工作。 对于以前的答案是没有的伎俩应该是部分:

<generateDirectory>${project.build.directory}/generated-sources/kenexa</generateDirectory> 

也是一个独特的执行ID需要

<id>GenerateKenexa</id> 

但不同的目录使代码就在于为两个顶级包,因此在最后我正在使用:

<forceRegenerate>true</forceRegenerate> 
+0

当使用单独的目录时,不应再需要,至少不要与插件的版本0.12.1一起使用。 – JSamir