我有两个使用 Maven 的春季项目。第一个是一些 api 的客户端,第二个是一个控制台程序,它部分地利用了该客户端。
我已将客户端打包到一个 jar 中,并在控制台程序的 pom 中引用它。
我已经设法让这个工作,但我对解决方案不是很满意:
1)我遇到的第一个问题是每个上下文 xml 文件都被命名为“applicationContext.xml”。因此,我无法找到任何方法来引用客户端中的上下文文件,而无需将其重命名为其他名称,例如 clientContext.xml。这可行,但还有其他方法可以明确引用它吗?
2)下一个问题是如何从控制台程序中调用clientContext.xml。为此,我添加<import resource="osrdClientContext.xml"/>
到控制台程序的 applicationContext.xml 中,这似乎允许它正确找到所有已定义的 bean。我不确定这是否是最佳做法?
3)在clientContext.xml中,我需要引用一个属性文件,所以有行<context:property-placeholder location="classpath:api.properties" />
。这在单独运行客户端时有效,但在运行控制台程序时似乎被忽略(或找不到文件)。api.properties 文件位于客户端打包 jar 的根目录中,jar 位于控制台程序的类路径中。我发现的唯一解决方法是将属性文件手动复制到控制台程序中,此时发现它没有任何问题。
4)两个项目都有一个资源目录,其中包含子目录“dev”、“beta”和“prod”。这允许我根据要运行的 Maven 配置文件定义不同的属性。这适用于单个项目,但是当我打包客户端时,它只包含我正在运行的配置文件的属性文件(这是有道理的)。但是,这意味着如果我针对配置文件“beta”运行控制台项目,它仍将针对打包它的任何配置文件运行客户端。能够打包所有属性文件并让客户端在与依赖它的任何配置文件相同的配置文件中运行会很方便。这是可能的/一个好主意吗?