首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用XJB与jaxb2-maven-plugin

使用XJB与jaxb2-maven-plugin
EN

Stack Overflow用户
提问于 2015-06-14 21:12:53
回答 2查看 11.1K关注 0票数 4

我在以下结构中有一个多模块maven项目:

代码语言:javascript
运行
复制
root-module
    |__module-a
    |    |__src
    |        |__main
    |            |__xsd
    |            |    |__my.xsd
    |            |__xjb
    |                 |__my.xjb
    |__module-b

根模块的POM简单地聚合了模块a和b(除其他外):

代码语言:javascript
运行
复制
<project>
  <artifactId>root-module</artifactId>
  <packaging>pom</packaging>
  <modules>
    <module>module-a</module>
    <module>module-b</module>
  </modules>
</project>

模块a的POM如下(除其他外):

代码语言:javascript
运行
复制
<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>

因此,当我在模块-a运行mvn时,一切正常,构建就成功了。但是,当我在根模块上运行它时,我从XJC插件中得到一个异常,它试图在根模块下找到绑定文件:

代码语言:javascript
运行
复制
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:

代码语言:javascript
运行
复制
[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]
  • 有什么线索吗?
  • 这是构建脚本中的配置问题吗?

我的构建系统的细节:

代码语言:javascript
运行
复制
Using Maven 3.2.5

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

参考来自这里的JAXB2 Maven插件文档。也搜索了很少相关的问题,但他们没有解释我的具体问题在任何地方。

更新:看起来像一个公开发行。保持线程打开,以防有解决办法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-15 04:32:23

在插件解析度可用之前,我将使用以下ant run:

代码语言:javascript
运行
复制
    <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作为一种替代方案。

票数 0
EN

Stack Overflow用户

发布于 2016-01-27 17:41:46

更新到2.2版的插件似乎有效。

代码语言:javascript
运行
复制
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>jaxb2-maven-plugin</artifactId>
  <version>2.2</version>

在使用插件的2.1版本时,我也遇到了同样的问题。只需更改到2.2版本就可以解决这个问题。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30834601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档