在使用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文件。
具体怎么构建这都是基础知识,网上资料太多了。
首先需要清楚的一点是:
当运行的模块如果存在依赖的话都会去仓库取,如果不存在的话肯定会报异常。因此我们要运行demo-service1或demo-web1的话,必须先通过install命令将demo-base1安装到本地仓库,当运行demo1-web1时同样需要先安装demo-service1到本地仓库,为解决一个个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都可以立即生效。
如果是通过配置tomcat:run的方式这样依然会去本地仓库中找依赖,不安装还送没效果的!!!!!。
问题二:当开发完成需要打包到测试环境的的时候,如何保证是最新的代码?
解决方案1:通过Eclipse的Export直接将demo-web1导出,这样不适合多环境配置,需要在打包前改不同环境的配置文件(数据库配置什么的)。
解决方案二:通过demo-parent打包package,根据需要可以激活不同环境的 <profile>,只需打包的时候只需参数P,如测试换 package -Ptest什么的就ok。
附件包含源代码:demo-parent.rar