我有两个项目,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或其他东西来做到这一点?
答案 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"