Maven构建多模块项目
在使用Maven进行项目开发过程中,如果非要使用多模块开发的方式的话,如果按照各模块的功能来讲,可以分为web层,service层,dao层,base层,当然基本上也没有用到什么dao层,因为我们一般都会有一个baseDao,所以,直接在service层中调用baseDao就ok了。
因此我就简略的分为三层:
web层包含页面和样式以及处理页面请求的controller。
service层主要写处理请求的逻辑。
base主要是处理数据库的交互和一些基础操作类什么的。
项目结构如下:
其中demo-base1和demo-service1打成jar包,demo-web1打成war包。而demo-parent为它们的父模块打包成pom文件。
具体怎么构建这都是基础知识,网上资料太多了。
首先需要清楚的一点是:
当使用tomcat:run运行的web模块,默认以jar包的形式去仓库里面找demo-service1,如果不存在的话肯定会报异常。
因此某个模块需要运行之前,先通过install命令将相应的依赖安装到本地仓库,当然如果觉得一个个install带来的麻烦,我们一样直接通过父类
demo-parent的install,这样就可以将其下demo-base1,demo-service1,demo-web1都安装到本地仓库了。
但问题是在实际开发过程中,模块进行修改时很频繁的,如果一动就install一次的话,显然有些麻烦,同时还有一个潜在的问题就是因为被依赖的模块都是通过jar文件被引用的,都是class文件,没法调式。
如何保证修改模块的代码可以即时生效,并且可断点调式?。
将dmo-web1模块通过->project Facets->转成Dynamic Module,并配置Deployment Assembly中加入依赖的demo-servic1,和demo-base1。
如下图所示:
并且是在server 试图中将demo-web1部署到tomcat中,问题就可以解决了。
这样在无乱时通过运行demo-web1时如无论是修改了demo-base1或demo-service1都可以立即生效。
问题二:当开发完成需要打包到测试环境的的时候,如何保证是最新的代码?
解决方案1:通过Eclipse的Export直接将demo-web1导出,这样不适合多环境配置,需要在打包前改不同环境的配置文件(数据库配置什么的)。
解决方案二:通过demo-parent打包package,根据需要可以**不同环境的 <profile>,只需打包的时候只需参数P,如测试换 package -Ptest什么的就ok。
附件包含源代码:demo-parent.rar
方法二:
其实在配置tomcat:run启动时,勾选配置Resolve workspace aritfacts就可以满足我们的需求,优先从本地工作空间中寻找依赖,这样就可以及时发现依赖模块的修改。