我们正在开发Mavenizing我们的java项目,并且我们希望为每个模块在接口和实现之间设置一个干净的分隔。 为了做到这一点,我们希望将每个模块分成两个子模块,一个用于接口和数据对象,另一个用于实现。 例如:maven - 用于接口和用Spring实现的独立模块
+commons
+commons-api
+commons-impl
的模块的多金属氧酸盐将被构造成使得没有模块依赖于IMPL子模块。这样,一个模块中的任何代码都不能“看到”另一个模块的实现细节。
我们遇到的问题是在哪里放置我们的spring XML。 在我们的项目中,我们使用通配符进口自动进口弹簧XML文件,如
<import resource="classpath*:**/*-beans.xml"/>
这样春天个XML的位置并不重要,在运行时,所有的模块得到加载到相同的类加载器和,POM中严格的单向依赖关系规则不适用。
然而,在开发过程中,我们希望IDE - 我们使用IntelliJ IDEA的 - 承认从春天个XML引用的实现类。 我们也希望IDEA识别在其他模块中定义的bean。
如果我们把API子模块春天个XML - 他们不会“看见”在IMPL子模块的实现类。 如果我们将它们放在impl子模块中,它们的bean将不会从其他模块“看到”。 也许可以将IDEA项目配置为从没有依赖关系的模块中识别spring XML,但我们更喜欢我们的POM保存所有项目结构信息,而不依赖于IDEA项目文件。
我们考虑建立第三子模块刚刚举行春季个XML(或许冬眠个XML以及)。例如:
+commons
+commons-api
+commons-impl
+commons-config
外部模块将取决于两个公地-API和公地配置和公地配置将取决于两个公地-API和公地IMPL,依赖于commons-impl标记为“提供”(以防止传递性解析)。
然而,这似乎是一个复杂而尴尬的解决方案,我们觉得必须有一个更好 - 更简单的方式来实现与Maven和Spring接口/ IMPL分离。
很好的问题,但没有答案呢?真是可惜.. – cirit 2015-07-15 12:18:04
@cirit同意 - 开始赏金 – drewmoore 2015-10-01 12:06:56