2014-09-23 50 views
3

我有两个项目,A和B.在项目A中,我有common.xsd文件,我使用cxf-xjc-插件 来生成运行良好的Java类。接下来,我想重用此创建的文件并在项目B的main.xsd文件中键入来自common.xsd 的difinitions,并且不要再从项目A生成类,但会出现问题,因为我不能包含完整的 在我main.xsd文件路径从不同的项目导入xsd,生成java类

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

,或者你的classpath 我看,这是可以使用HTTP,但我不能使用它。有没有办法使用一个maven或其他东西来做到这一点?

回答

2

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

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

更新:

我试图用不同的架构编译,但不幸的是,我不能 undersant它。我应该为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" 
+0

我试图用不同的架构编译,但不幸的是,我不能undersant它。我应该为xsd文件创建单独的jar并将其用作依赖项吗?现在我有 依赖于整个项目A,其中包含生成的类和xsd文件 – Unyx 2014-09-23 09:50:48

+0

请参阅更新。 – lexicore 2014-09-23 10:19:06

+0

我点击eclipse中的common.xsd来生成jaxb类,我拥有它,但是我没有在这个项目中使用这个插件文件 – Unyx 2014-09-23 10:36:17