Maven建立项目时的模块之间的依赖问题与单元测试的冲突

  问题是这样的:我用Maven建立的了个spring mvc 的demo.这个项目共有web,controller,
service,dao,model,utils这几个module.然后,web依赖于controller,controller依赖于service,service依赖于dao,dao依赖于model,model依赖于utils,utils依赖于spring相关的jar.我把spring的配置文件放在了web下(因为是demo,所以只有一个文件,di使用的是注解),然后在web.xml中配置DispatcherServlet的时候加载spring的配置文件。
  然后问题来了,因为这是个demo,我根本没想启动server,我只是想做些单元测试,但我发现按上面的方式建立项目,不启动server根本无法进入spring的环境。于是,我选择手动加载spring的context,我把手动加载context的代码放在了utils这个module中(其实这就是我加这个模块的目的).但是问题来了,因为spring配置文件在web中,所以我在utils 中“够不着”配置文件。我解决这个问题的方法是:让utils依赖于web,但后来发现这样就造成了依赖的循环。
好了,问题就是这样,我还试过一些其它的解决办法,但都遇到这样那样的问题,没有一种方法能令我满意。
所以我想问问大家,这个问题应该怎么解决,或者,你们平时是怎么建立项目的?

http://blog.csdn.net/chaijunkun/article/details/35796335

每个模块都可以有自己的spring配置文件,因为spring配置文件可以叠加,在你的web模块中的web.xml中可以采用:

contextConfigLocation

classpath:controller-spring.xml
classpath:service-spring.xml
classpath:model-spring.xml
classpath:web-spring.xml


的方式把这些配置文件叠加起来。然后每个测试时使用spring-test模块,使用注解方式抓取需要的配置文件:
@ContextConfiguration({ "classpath:controller-spring.xml",
"classpath:service-spring.xml", "classpath:model-spring.xml" })
就可以满足测试需要了。
你应该注意到测试时并没有用到web-spring.xml,这是因为你的其他模块不应该依赖于web模块,也就是说在使用Maven开发前划分模块时就要考虑避免循环依赖。