我有一组相关的Java应用程序,它们组织在Apache Maven项目中,如下所示:
/project/
module1/
module2/
module3/
...
这些模块具有不同的Java程序包,尽管它们具有相同的基本程序包层次结构。一些模块包含用于独立应用程序的代码。每个应用程序都在运行时通过一个XML文件进行配置,该文件具有定义的XML模式。每个应用程序的模式和配置对于应用程序都是唯一的。模式定义通过JAXB / XJC转换为Java类。
请考虑模块中的一个实用程序类,该模块可以被一个或多个应用程序使用。实用程序类由XML模式定义的XML配置。该模式与实用程序类位于同一模块中。
我试图弄清楚如何配置模式,以便实用程序配置可以包含在客户端应用程序的XML配置中。
例如:
假设实用程序XML模式如下:
<xs:schema ...>
<xs:complexType name="ConfigTypeA">
<xs:sequence>
<xs:element name="config-a-1" type="xs:string" />
<xs:element name="config-a-2" type="ConfigTypeB" />
...
</xs:sequence>
</xs:complexType>
...
</xs:schema>
我想在客户端应用程序的架构中包含实用程序架构。因此,客户端应用程序架构的摘要可能是:
<xs:element name="app-util-config-a" type="ConfigTypeA">
从XML模式的角度来看,我假设需要使用模式<include>
或<import>
元素来为客户端应用程序的模式提供实用程序模式定义。
问题
我在这里遇到的困难是为实用程序模式提供正确和正确的URI。该方案很简单,本身没有“ URL”。 file:
URI方案很有意义,但我不知道如何以动态方式(即,用于构建和分发)设置正确的路径。
将实用程序架构的副本放置在每个应用程序的配置架构中没有任何意义。我不仅要复制,而且生成的生成类的包将与实用程序类的包不匹配。这就需要将它放在一个位置,并为每个应用程序配置模式提供正确的URI。
我正在寻找有关如何最好地进行配置或组织以实现我所描述的想法。我对maven的了解还不够,还不知道它是否有任何功能可以帮助您解决这一问题。
更新:2018年8月7日美国东部时间
我的帖子被标记为可能重复,并包含指向可能的相关问题的几个链接。我已经看过这些内容,尽管它们是相关的,但请不要完全掩盖我所遇到的问题。
让我尝试更好地描述问题。
/project/
module1/
src/main/java/a/b/c/app1/...
src/main/resources/config/app1-schema.xsd
module2/
src/main/java/a/b/c/app2/...
src/main/resources/config/app2-schema.xsd
module3/
src/main/java/a/b/c/util/...
src/main/resources/config/util-schema.xsd
app1和app2都可以使用模块3中的实用程序。该实用程序还在运行时由其自己的架构定义的XML配置。由于这些模式都无法以任何方式“提供”并且没有URL,因此看来我必须使用URI file:
方案来引用其他位置的模式。
我希望能够在应用程序的架构中引用在实用程序架构中定义的架构类型。如果要手动执行此操作,则需要引用特定于平台的完整目录路径,以指向实用程序模式位于任一应用程序模式中的<include>
元素中的位置。
这给我带来了两个问题要解决:1)为构建目的指定正确的file:
路径,以及2)在安装和使用所构建的应用程序时再次输入。
这是不切实际的,因为它需要硬连线的路径。有办法解决这个问题吗?