Maven 分模块开发
在此之前,你的需要明白什么是 maven 的继承和 maven 的聚合。
何为 maven 的继承?
继承是为了消除重复,如果将dao、service、web 分开创建独立的工程则每个工程的 pom.xml 文件中的内容存在重复,比如:设置编译版本、锁定 spring 的版本等,可以将这些重复的内容配置提取出来在父工程的 pom.xml 中定义。
何为 maven 的聚合?
项目开发通常是分组分模块开发,每个模块开发完成要运行整个工程需要将每个模块聚合在一起运行,比如:dao、service、web 三个工程最终会打一个独立的 war 运行。满足一次运行,构建多模块的要求
下面我通过一个 ssh 的 web 工程 的分模块开发来学习一些基本操作和项目结构。
ssh_parent 父模块
1. 打开 eclipse,file->new->Maven->Maven Project, 点击 next.
2. 输入坐标
ps: 这里的 Packaging 类型为 pom,你可理解为是一个父工程的意思,点击 finish
3. 创建好父工程后,我们习惯把子工程共同依赖的 jar 包或者该工程的所有 jar 包都编写在 父工程的pom.xml 中。
例如该 ssh 工程,把工程所依赖的 jar 包都书写在了该 pom.xml 中。
ssh-dao 子模块
1. 同样是 file->new->Maven,但子模块接下来不是选择 Maven Project 了,选择 Maven Module,点击 next.
2. 输入字工程名字。并选择父工程 ssh-parent,点击 next
3. 输入 Group Id,并选择 Packaging 类型为 jar,点击finish.
刚创建好的子工程 ssh-dao 的 pom.xml 如下显示:声明了父工程
4. 编写 dao 层的代码和文件在相应位置,并实行 install 命令,打成 jar 包到本地仓库供 service 层使用
ps: 其实在一般开发中也把 entity 作为一个子模块来单独开发。此 ssh 只是一个简单实例,entity 实体类少,就直接放在 dao 层。
ssh-service 子模块
ssh-service 子模块的创建和 ssh-dao 一样,创建好之后把对应的代码写在该模块对应位置即可!
ssh-web 子模块
同上,不再展开。这里有一点需要注意的是,该子模块的 Packaging 类型为 war
另外,该工程下的 web.xml 文件的 spring 监听器修改成如下写法:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:applicationContext-*.xml</param-value>
</context-param>
模块聚合
编写子工程完成后,打开父工程的 pom.xml,其中有一段代码
其实module配置的是路径,此路径是相对父工程的 pom.xml 文件找子工程的 pom.xml 文件的路径。聚合会根据这段代码聚合!