从不同的项目导入xsd,生成java类

时间:2014-09-23 09:08:14

标签: java jaxb xsd maven-jaxb2-plugin

我有两个项目,A和B.在项目A中,我有common.xsd文件,我使用cxf-xjc-plugin   生成工作良好的java类。接下来,我想重用这个创建的文件,并从common.xsd中键入difinitions   在项目B的main.xsd文件中,不再从项目A生成类,但是有一个问题,因为我不能   在main.xsd文件中包含完整路径

 <xs:import namespace="..." schemaLocation="PATH_TO_PROJECT_A/common.xsd" /> 

或你的classpath   我读过可以使用http,但我无法使用它。有没有办法使用maven或其他东西来做到这一点?

1 个答案:

答案 0 :(得分:2)

是的,这是可能的,关键字是:

必填免责声明:我是提供这些功能的maven-jaxb2-plugin的作者。

更新

  

我尝试使用单独的模式编译,但不幸的是我不能   低于它。我应该只为xsd文件创建单独的jar并使用   它作为依赖?现在我依赖整个项目A.   其中包含生成的类和xsd文件

这就够了。您需要一个包含生成的类,XSD文件和META-INF/sun-jaxb.episode的JAR。所有这些通常都是默认生成的。

然后你可以将这个JAR用作“剧集”。 XJC将自动使用sun-jaxb.episode资源作为绑定文件,并且此文件基本上表示“不为命名空间X中的模式生成任何内容,而是使用以下类”。这是允许您避免冗余生成类的一部分。这个主要是,但有时候XJC仍会产生一些东西 - 它们可以被安全地删除。

另一件事是你想要使用JAR中的模式。这可以通过目录和特殊实体解析器完成,默认情况下由maven-jaxb2-plugin提供。

所以只需使用任何schemaLocation,然后在目录文件中重写它:

REWRITE_SYSTEM
 "https://acme.com/foo/a.xsd"
 "maven:com.acme.foo:foo-a!/a.xsd"