2012-08-31 91 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