IDEA多模块项目部署问题

IDEA多模块

为什么要有多模块

先说一下什么是多模块吧(熟悉这一part的可以跳过)。新手朋友都知道,对于一web项目,我们都习惯用maven去管理依赖的jar包,这是maven最基本的作用。那么当一个web项目较大的时候,我们要处理的就不仅仅是一项业务了。拿一个程序员最熟悉的电商项目来说,我们要处理的业务不仅仅是user,还涉及到订单,物流,购物车,订阅等等,每一个业务都要都dao,service,controller,interceptor等去处理,随着业务的增加,项目的依赖也会增多,为了更好的管理这些依赖,以及防止出现对我们有毁灭性打击的jar包冲突,利用maven多模块就可以帮我们很好的管理这些依赖。

如何规划多模块

规划自己项目的多模块是没有明确的标准答案,只要你的规划合理,清晰,遵循单一职责原则就可以了。通常,我们都会创建一个parent工程,在parent工程的pom.xml中明确我们整个项目所要用到的jar包依赖。顾名思义,parent工程是其他子模块的父模块,所以parent什么都不需要处理,他仅仅只需要管理好整个项目我们所要用到的jar即可。那么,子模块在哪创建呢?不同于eclipse,idea没有workspace,idea中每创建一个project,都相当于eclipse中新创建一个workspace,所以我们在idea中创建子模块的时候,要注意,在parent这个模块中,new module(不是 new project),并且新的module的parent要选择我们已经创建好的parent模块。这样就可以根据自己的规划去创建不同的模块了。

特别有几个要注意的问题,我们通常部署到服务器的都是都是war包,所以在创建的时候,parent工程我们选择pom包的打包方式,要部署的模块我们选择war包,别的模块我们选择jar包。

多模块部署

就拿tomcat来举例吧,idea对tomcat似乎没有eclipse对tomcat那么友好。各式各样的报错。对于多模块部署
在这里插入图片描述
比如我要部署到tomcat上的是webui这个war包,那么在Artifacts中我们就要添加Web Application:Exploded。选择from Module(因为我们创建的都是module),选择我们要部署的那个module就可以了。在这里插入图片描述
显然我的webui就打包成war包了,其余的模块都是jar包,parent是pom包。

在这里插入图片描述
同时在tomcat的配置中,我们在Deployment中添加我们打包好的war包,其实当我们只有一个 war包的时候,就会自动选择那个war包了。
到这里理论上我们就可以run我们的war包了,而且在eclipse中也确实是这样。但是,idea如果这样也可以的话,idea就不收费了。。。

举个很坑的例子,比如我的webui里面是没有实体类和controller,service这些的。我的webui是依赖component和entity这两个字module的。所以,当我们在部署war包的时候,切记要加入你war包依赖的子模块。就像是引入spring,mybatis这些jar包一样。在这里插入图片描述
一定要在Artifacts中找到你的war包,并在lib中加入你所依赖的子模块的jar包。很多关于maven多模块中关于找不到实体类,Class Not Found等这类问题,很多都是因为你所依赖的子模块的jar包并没有被war包带到服务器上。

那么这个lib文件夹是什么呢?
来到本地看看,在这里插入图片描述
实际上,他是在parent工程的out文件夹中深处的lib文件夹下,并且我们发现已经有了conponent和entity两个子模块的jar包。

到此,war包就可以正常运行了,同时,当被部署的模块增加了新的依赖模块时,别忘了再次加入新的模块的jar包。