2015-06-14 80 views
1

我有如下結構的多模塊行家項目:與JAXB2-行家-插件使用XJB

root-module 
    |__module-a 
    | |__src 
    |  |__main 
    |   |__xsd 
    |   | |__my.xsd 
    |   |__xjb 
    |     |__my.xjb 
    |__module-b 

用於根模塊的POM只是彙總模塊A和B(除其他外):

<project> 
    <artifactId>root-module</artifactId> 
    <packaging>pom</packaging> 
    <modules> 
    <module>module-a</module> 
    <module>module-b</module> 
    </modules> 
</project> 

而對於模塊的POM如下(除其他事項外):

<project> 
    <parent> 
    <artifactId>root-module</artifactId> 
    </parent> 
    <artifactId>module-a</artifactId> 
    <properties> 
    <my-definitions.xsd>${basedir}/src/main/xsd/my.xsd</my-definitions.xsd> 
    <my-bindings.xjb>${basedir}/src/main/xjb/my.xjb</my-bindings.xjb> 
    <my.output>${basedir}/target/generated-sources/jaxb/my</my.output> 
    </properties> 
    <build> 
    <plugins> 
     <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>jaxb2-maven-plugin</artifactId> 
       <executions> 
        <execution> 
         <id>generate-my-classes</id> 
         <phase>generate-sources</phase> 
         <goals><goal>xjc</goal></goals> 
         <configuration> 
          <sources><source>${my-definitions.xsd}</source></sources> 
          <xjbSources><xjbSource>${my-bindings.xjb}</xjbSource></xjbSources> 
          <outputDirectory>${my.output}</outputDirectory> 
         </configuration> 
        </execution> 
       </executions> 
     </plugin> 
    </plugins> 
    </build> 
</project> 

所以,當我在運行模塊一個MVN,前夜工作正常,構建成功。但是,當我在根模塊運行它,我得到它試圖找到綁定根模塊下文件的XJC插件異常:

com.sun.istack.SAXParseException2; IOException thrown when processing "file:/home/root-module/src/main/xjb/my.xjb". Exception: java.io.FileNotFoundException: /home/root-module/src/main/xjb/my.xjb (The system cannot find the path specified). 

有趣的是,它能夠找到XSD正確:

[ERROR] Failed to execute goal org.codehaus.mojo:jaxb2-maven-plugin:2.1:xjc (generate-my-classe) on project module-a: 
[ERROR] +=================== [XJC Error] 
[ERROR] | 
[ERROR] | 0: file:/home/root-module/module-a/src/main/xsd/my.xsd 
[ERROR] | 
[ERROR] +=================== [End XJC Error] 
  • 任何線索?
  • 這是構建腳本中的配置問題嗎?

我的編譯系統的具體細節:

Using Maven 3.2.5 

<groupId>org.codehaus.mojo</groupId> 
<artifactId>jaxb2-maven-plugin</artifactId> 
<version>2.1</version> 

here參考JAXB2 Maven插件文件。 還搜索了一些關於SO的相關問題,但他們沒有在任何地方解釋我的具體問題。

更新:看起來像open issue。如果有解決方法,請保持線程打開。

回答

0

直到插件的分辨率是可用的,我使用下面的螞蟻運行黑客:

<plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-antrun-plugin</artifactId> 
     <executions> 
      <execution> 
       <id>generate-my-classes</id> 
       <phase>generate-sources</phase> 
       <goals> 
        <goal>run</goal> 
       </goals> 
       <configuration> 
        <tasks> 
         <mkdir dir="${project.build.directory}/generated-sources/jaxb/my" /> 
         <exec executable="${env.JAVA_HOME}/bin/xjc.exe" dir="${project.basedir}/src/main/xsd"> 
          <arg value="-p" /> 
          <arg value="my.package" /> 
          <arg value="-b" /> 
          <arg value="${project.basedir}/src/main/xjb" /> 
          <arg value="-d" /> 
          <arg value="${project.build.directory}/generated-sources/jaxb" /> 
          <arg value="." /> 
         </exec> 
        </tasks> 
       </configuration> 
      </execution> 
     </executions> 
    </plugin> 

更新:

Github

考慮Apache CXF Utils作爲替代。

2

更新到版本2.2的插件似乎工作。

<groupId>org.codehaus.mojo</groupId> 
    <artifactId>jaxb2-maven-plugin</artifactId> 
    <version>2.2</version> 

我在使用插件的2.1版時遇到了同樣的問題。只需更改爲2.2版即可解決問題。