小编dka*_*sky的帖子

maven - 用于接口和Spring实现的独立模块

我们正在研究Mavenizing我们的java项目,我们希望在每个模块的接口和实现之间建立一个清晰的分离.为了做到这一点,我们希望将每个模块分成两个子模块,一个用于它们使用的接口和数据对象,另一个用于实现.例如:

 +commons 
  +commons-api 
  +commons-impl 
Run Code Online (Sandbox Code Playgroud)

将配置模块的POM,使得没有模块依赖于impl子模块.这样,来自一个模块的代码就无法"看到"另一个模块的实现细节.

我们遇到麻烦的是,将Spring XML放在哪里.在我们的项目中,我们使用通配符导入自动导入spring XML文件

<import resource="classpath*:**/*-beans.xml"/>

这样,Spring XML的位置在运行时并不重要,因为所有模块都被加载到同一个类加载器中,并且POM中严格的单向依赖规则不适用.

但是,在开发过程中,我们希望IDE(我们使用Intellij IDEA)识别从spring XML引用的实现类.我们还希望IDEA识别其他模块中定义的bean.

如果我们把API子模块春天个XML - 他们不会"看见"在IMPL子模块的实现类.如果我们将它们放在impl子模块中,它们的bean将不会从其他模块中"看到".可能可以将IDEA项目配置为从没有依赖项的模块中识别spring XML,但我们更喜欢POM保存所有项目结构信息而不依赖于IDEA项目文件.

我们考虑创建第三个子模块只是为了保存Spring XML(也许还有hibernate xmls).例如:

 +commons 
  +commons-api 
  +commons-impl 
  +commons-config
Run Code Online (Sandbox Code Playgroud)

外部模块将依赖于commons-apicommons-config,commons-config将依赖于commons-apicommons-impl,并且依赖于commons-impl标记为"提供"(以防止传递解析).

然而,这似乎是一个复杂而笨拙的解决方案,我们认为必须有一个更好 - 更简单的方法来实现与Maven和Spring的接口/ impl分离.

java spring maven

23
推荐指数
2
解决办法
6974
查看次数

标签 统计

java ×1

maven ×1

spring ×1