gpt4 book ai didi

xsd - 在多个 Maven 工件上分发 XSD 文件

转载 作者:行者123 更新时间:2023-12-04 12:12:01 25 4
gpt4 key购买 nike

这是我想要实现的一个小例子:

Maven Artifact A 是众多 Web 服务之一,它定义了一个 XSD Schema
请求和响应的定义。 (src/main/资源/xsd)

Artifact A 依赖于 Artifact B,它是一个简单的 JAR 项目,包含大量
具有低级类型描述的主 XSD。 (src/main/资源/xsd)

工件 A 中的 XSD 使用指定的类型定义(包含)
曾经在工件 B 中。

如果可能的话,我真的很想知道如何包含位于作为 maven 依赖项加载的 jar 中的 xsd 文件,以及如何在 Netbeans 和 Eclipse 等 IDE 中解析 webservice xsd(和 wsdl)。

如果这种方法看起来很奇特 - 是否有更好的清洁设计实践?

更新

首先,这是一个简单的示例,说明我希望架构包含如何工作......

Artifact A (WAR Module)
POM:
...
<artifactId>A</artifactId>
...
<dependency>
<artifactId>B</artifactId>
...
</dependency>

Schema:
....
<xs:include schemaLocation="classpath://net/elfwyn/xsd/schema.xsd"/>
....

Artifact B (JAR Module)

Schema Location:
src/main/resources/net/elfwyn/xsd/schema.xsd

对于这样的问题,似乎有几种解决方案,但我不知道如何在我的环境中实现它们:

我知道嵌入在(netbeans7.1)IDE(用于开发环境)中并且可作为 Maven 插件(用于生产环境)中的目录解析器,它应该能够在模式文件的位置指定别名。然后应将此别名用作模式位置。

但是我不知道如何指定访问 JAR 文件中的模式的 Catalog.xml。
对我来说,这似乎与直接在模式位置中指定它是相同的问题。
还有维护每个 WAR 目录的开销——如果可能的话,我宁愿不接受这个项目。

关于 Maven 插件,我还没有找到任何结论性的东西。

其他 sources在 jax-b 的上下文中实现自定义目录解析器,
但我还看不到在 Java-WS 环境中实现这种解析器的可能钩子(Hook),以及它应该如何与上面提到的 maven-plugin 或 IDE 目录解析器一起工作......

最佳答案

我认为你的问题是有道理的。过去我经常发现我有一个 Maven 模块需要对可以在依赖 JAR 中找到的文件进行特殊处理。

我之前做的就是让Artifact B成为Artifact A的依赖。然后在Artifact A的pom.xml中我使用了Maven依赖插件的特殊配置如下:

<plugin>
<!-- Used to pull XSD files from the JAR -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>unpack-xsd-files</id>
<!-- Using the initialize phase because it is before the generate sources phase -->
<phase>initialize</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<!-- Artifact that Holds our custom templates -->
<groupId>com.mycorp</groupId>
<artifactId>artifact-b</artifactId>
<version>${artifact-b.version}</version>
<type>jar</type>
</artifactItem>
</artifactItems>
<includes>**/*.xsd</includes>
<outputDirectory>${project.basedir}/target/xsd-includes</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>

现在,您可以在 Artifact A 的目标目录中找到您感兴趣的 XSD 文件,您可以从那里对它们做任何您想做的事情。您可以将它们作为资源包含,从其他 XSD 文件中引用它们,将它们嵌入到您自己的 JAR 中或其他任何东西中!从配置中可以看出,您也不必将它们放在目标目录中;您可以将它们直接放入您的 /src/main/resources目录。

您可以将此配置添加到您想要的任何 Maven 模块,以便多个模块都可以以相同的方式工作。这种方法的好处是它也可以通过 M2Eclipse 与 Eclipse 一起工作。

关于xsd - 在多个 Maven 工件上分发 XSD 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9082407/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com