2013-04-05 139 views
4

我有一个Maven项目,其中包含“核心”和“网络”部分。我试图将其转换为多个模块。Maven多模块项目中的自动装配依赖关系

我已经采取了“网络”包,并把它们放到新的项目。我已经将核心项目添加为依赖项,并且我可以在Eclipse中引用它的类。当我构建它时,“核心”项目在“web”项目中的WEB-INF\lib中正确显示。

在“web”项目中,来自“核心”项目的类为@Autowired时出现问题。

在这种特殊情况下,我将服务类从“核心”自动装配到“web”项目中的一个Web服务类中。如果我在我的“web”应用程序配置中将核心服务所在的软件包添加到我的context:component-scan中,它会找到该服务,但是该服务会引用一个存储库,该存储库引用一个实体,该实体正在寻找一个实体管理器工厂,已经在我的“核心”项目的应用程序上下文中进行了配置。

所以看来,“核心”项目中的context:component-scan也许没有发生?或者,也许所选的课程没有提供给“网络”项目?

我对多模块项目是全新的,所以如果任何人都可以让我开始正确的方向来解决这个问题,我将不胜感激。

我在Eclipse中使用m2e和Run Jetty Run插件(如果有的话);然而,当我从命令行执行mvn jetty:run时,我似乎遇到同样的问题。

回答

5

您需要从Web模块应用程序上下文中加载核心模块应用程序上下文。否则,它不会知道在核心应用程序上下文中定义的bean。 请看一下Application context from other maven module cannot be loadedSpring import application context from another project的答案以获得正确的解决方案。
您也可以看看这个post,它很好地描述了如何使用Maven创建一个多模块Spring项目。

+0

感谢您的回复。这似乎工作。如果你不介意的话,还有一个很快的问题......这是这种模块化的普遍接受的解决方案吗?我所要问的唯一原因是因为如果我要分发我的“核心”项目,有人必须至少知道我的应用程序上下文的名称才能正常工作。这对我来说不是问题,因为这都是内部的,但我想以最脆弱的方式做到这一点。是否存在应该在其他模块中加载的应用程序上下文的特定命名约定? – Luke 2013-04-08 14:38:40

+0

不确定是否会导出我的应用程序上下文。最好提供一个很好的例子,说明如何用核心库公开的主要服务创建这样的上下文,并让消费者处理它。我认为这与明确记录的API一起应该做到这一点。 – 2013-04-08 15:27:32

+0

太棒了!再次感谢。 – Luke 2013-04-08 17:25:56

相关问题