Maven多模块化构建项目Demo
架构入门初探,最近在学习项目架构,觉得有必要记录一些学习心得笔记,供大家学习借鉴,构建自己的项目体系,自身程序员出身,语言表述能力不足,希望慢慢改善吧,闲话少叙,进入正题。
目录
问题知识点:pom.xml中 dependencies与dependencyManagement的区别
最后,希望我们能共同成长进步吧,翻过这座山他们就会听到你的故事。
先来一张项目架构图
接下来一步步教大家如何构建架构
前言
简化技术上的分块,专注于业务上的划分。
- 构建项目总的依赖jar版本管理,创建依赖池工程 dependencies
- dao、service 、model 属于技术上依赖的东西,可以统一放在一个模块里,比如一起放到common 里面
- 如果是web项目,就直接webapp -> common -> util
- 如果集成 api的项目,就直接api -> common -> util
步骤
一、构建依赖池dependencies
这是一个pom工程,用于统一管理jar版本依赖,创建步骤:
新建项目
点击Next,选择Maven模板 site-simple
Next输入项目名称,包名,点击Finish,完成创建
pom.xml主要内容如下:
<!-- jar版本 -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<junit.version>3.8.1</junit.version>
</properties>
<!-- 声明依赖池引用 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
二、构建父工程parent
这也是一个pom项目,声明项目从依赖池中引用的jar,子模块继承的主项目,主要创建步骤同上
pom.xml主要内容如下:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.version>0.0.1-SNAPSHOT</project.version>
<dependencies.version>0.0.1-SNAPSHOT</dependencies.version>
</properties>
<dependencyManagement>
<dependencies>
<!--依赖池 -->
<dependency>
<groupId>com.online</groupId>
<artifactId>dependencies-frame</artifactId>
<version>${dependencies.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<!-- 声明依赖池中引用的依赖 全部子项目模块自动继承依赖 -->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>
三、构建子模块项目common、api、util
都是maven工程,继承parent工程,创建module工程,创建步骤:
父工程右键新建
点击Next,设置模块名,继续下一步,选择quickstart,点击下一步
设置包名,点击Finish完成创建
pom.xml主要内容,删除警告的部分
<parent>
<groupId>com.online</groupId>
<artifactId>parent-frame</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>common-frame</artifactId>
<name>common-frame</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
四、构建webapp项目
操作步骤基本同上,不做赘述,选择webapp模板进行操作,完成创建
需要依赖common以及util
pom.xml主要内容
<parent>
<groupId>com.online</groupId>
<artifactId>parent-frame</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>webapp-frame</artifactId>
<packaging>war</packaging>
<name>webapp-frame Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>com.online</groupId>
<artifactId>common-frame</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.online</groupId>
<artifactId>util-frame</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
创建完以上步骤后,父工程的pom文件会有以下模块内容
<modules>
<module>common-frame</module>
<module>util-frame</module>
<module>webapp-frame</module>
<module>api-frame</module>
</modules>
到这里就已经完成maven多模块化构建了
知识点及体会
这里是构建过程中遇到的一些问题的记录,也是一些知识的盲点,希望大家能避免这些误区,有的时候我们可能仅仅会使用一些东西,而不理解其中的道理,缺少一些自己的思考,不能形成自己的知识储备,这也是自己所欠缺的技能,与君共勉吧,继续努力,去一点点积累,只有自己实践才能渐渐理解其中的真谛,所以需要我们动手去实践,去编码一些基础的东西,这样才能加深自己的记忆。
问题知识点:pom.xml中 dependencies与dependencyManagement的区别
在构建依赖池pom项目后,子模块一直出现jar依赖引用不上的情况,花了很长时间,也很费解,逐步解决问题过程中,才了解了以下内容,希望各位不要再踩坑,遇到问题也不要轻言放弃
简单理解如下:
dependencies即使在子项目中不写该依赖项,那么子项目仍然会从父项目中继承该依赖项(全部继承)dependencyManagement里只是声明依赖,并不实现引入,因此子项目需要显示的声明需要用的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom;另外如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。
Demo下载地址
以下是个人的技术交流群,有兴趣一起学习交流的可以加入
QQ群:763774519(Java极客技术部落)
想要源码的可以进群文件下载
或者可以扫一扫关注微信订阅号,回复:maven,获取源码
最后,希望我们能共同成长进步吧,翻过这座山他们就会听到你的故事。