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

xsd从不同项目导入,生成java类,java,jaxb,xsd,maven-jaxb2-plugin,Java,Jaxb,Xsd,Maven Jaxb2 Plugin,我有两个项目,A和B。在项目A中,我有common.xsd文件,其中我使用了cxf xjc插件 生成运行良好的java类。接下来,我想重用这个从common.xsd创建的文件和类型定义 在项目B的main.xsd文件中,不再从项目A生成类,但有一个问题,因为我不能 在my main.xsd文件中包含完整路径 <xs:import namespace="..." schemaLocation="PATH_TO_PROJECT_A/common.xsd" /> 或者您可以选择类

我有两个项目,A和B。在项目A中,我有common.xsd文件,其中我使用了cxf xjc插件 生成运行良好的java类。接下来,我想重用这个从common.xsd创建的文件和类型定义 在项目B的main.xsd文件中,不再从项目A生成类,但有一个问题,因为我不能 在my main.xsd文件中包含完整路径

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

或者您可以选择类路径
我读到可以使用http,但我不能使用它。有没有一种方法可以使用maven或其他东西来实现这一点?

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

  • 使用剧集避免生成已经生成的类
  • 覆盖模式位置,包括指向Maven工件内的模式
免责声明:我是提供这些功能的
maven-jaxb2-plugin
的作者

更新:


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

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

然后你可以把这个罐子当作“插曲”。XJC将自动使用
sun jaxb.eption
resource作为绑定文件,该文件基本上是这样说的:“不要为名称空间X中的模式生成任何内容,而是使用以下类。”这是允许您避免重复生成类的一部分。这在很大程度上是可行的,但是有时候XJC仍然会生成一些东西——它们可以安全地删除

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

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

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

我尝试使用单独的模式编译,但不幸的是我无法理解它。我应该只为xsd文件创建单独的jar并将其用作依赖项吗?现在我有了对整个项目A的依赖性,其中包含生成的类和xsd文件,我在eclipse中单击common.xsd生成jaxb类,我有它,但在这个项目中我没有这个episod文件,那么你可能无法用纯eclipse解决它。看看是否有一个包含
-eposion
参数的设置。谢谢,生成类很好,但我仍然无法从项目B的main.xsd中的common.xsd文件访问简单的类型定义。您能更详细地解释一下如何操作吗?我不想使用http。可能吗?我使用mavenThe highsource.org和java.net链接此时似乎不起作用。我发现哪一个可能更流行,并且链接到