博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Maven分模块构建项目
阅读量:3963 次
发布时间:2019-05-24

本文共 2545 字,大约阅读时间需要 8 分钟。

第一节 Maven传递依赖

1.1 什么是传递依赖?

当项目依赖一个jar包时,与这个jar包关联的其他jar包也会关联到当前项目,这种现象就是传递依赖。

比如A项目依赖B项目,B又依赖C项目, 此时A中也包含了C的依赖。

1.2 依赖传递出现的问题

依赖传递出现的问题: 经常出现jar包冲突,比如B中依赖一个jar包,C中也依赖一个jar包,两个jar包属于同一个,只是版本号不同,则会冲突

解决方案:

1 直接排除指定的jar包
2 版本号限定原则

1.3 解决jar包冲突的方式(4种)

1.3.1 排除原则(常用)
在“
”中使用
mysql
mysql-connector-java
1.3.2 版本号限定原则(常用步骤)
5.1.42
mysql
mysql-connector-java
${mysql.version}
mysql
mysql-connector-java
1.3.3 路径就近原则(基本不用)
1.3.4 第一声明优先原则(基本不用)

注意:如果是直接依赖,不遵循第一声明原则,后面会覆盖前面的依赖

1.4 传递依赖对依赖范围的影响

A项目直接依赖 B项目 (最左边一列 A和B的依赖范围)

B项目直接依赖C 项目 (最上面一行B和C的依赖范围)

交叉点A和C的依赖范围

在这里插入图片描述

第二节 分模块构建项目

将商城项目拆分为多个模块开发:

在这里插入图片描述

依赖关系根据实际业务需求进行处理,我们还可以拆分为订单模块、支付模块、物流模块和web模块,订单/支付和物流之间没有关系,则不需要依赖,但是都和web有关系,则web可以依赖支付,支付而已依赖订单,实现传递依赖;web可以直接依赖物流。

2.1理解继承和聚合

继承

开发中多个项目有共同的jar包依赖,可以采用继承方式简化各个项目的pom文件,在父类的pom文件中依赖共同拥有的jar。继承是为了消除重复,如果将dao、service、web分开创建独立的工程则每个工程的pom.xml文件中的内容存在重复,比如:设置编译版本、锁定mysql的版本的等,可以将这些重复的配置提取出来在父工程的pom.xml中定义。

注意:

1.父级项目只能是pom打包方式。
2.子项目是一个Maven Module,web模块是war包,其他是jar包

聚合

项目开发通常是分组分模块开发,每个模块开发完成要运行整个工程需要将每个模块聚合在一起运行,比如:dao、service、web三个工程最终会打一个独立的war运行。

能够把项目的各个模块聚合在一起构建。一般用于分模块开发,最后整体打包发布。

注意:

1.根项目(模块)是一个pom项目。
2.子模块:Maven Module
3.每个模块写完后需要上传到私服
4.打包,需要整体打包找到最后的war项目使用Tomcat加载

实际中,我们会将一些庞大的项目拆分为若干模块进行开发

三层+MVC 如下:
dao (包含实体类、utils)----------jar
service------jar
web----------war

2.2 案例演示继承和聚合

​第一步:创建父工程,不需要骨架,然后修改pom.xml文件,更改版本以及导入版本号限定和依赖

​第二步:右键父工程项目,新建【Module】,不需要骨架,创建dao,并继承父工程,pom.xml中的相关配置可以删除,因为继承了父工程

​第三步:创建service,并继承父工程,同第二步

​第四步:创建web,并继承父工程,需要骨架,同第二步

第五步:可以创建domain和utils放到dao模块,也可以单独创建两个,但是必须在web/service/dao模块的pom.xml文件中进行【传递】依赖配置,使之依赖utils和dao

第六步:配置tomcat,并运行

第七步:点击右边栏【MavenProject】选择父类模块,在生命周期中选择【package】打包,则对应的web为war包,对应的java为jar包,这样,可以将dao 和 service 模块删除了,或者忽略掉。然后在pom.xml中将依赖删除再复制(剪切),这样maven会直接将dao和service的jar包导入。

注意:分模块开发项目编译、打包、安装需要使用父工程来整体操作。如果要操作单个子模块,最后先整体安装一次,因为单个子模块需要依赖信息。

  • 方法1:在maven-web工程的pom.xml中配置tomcat插件运行

    运行maven-web工程它会从本地仓库下载依赖的jar包,所以当maven-web依赖的jar包内容修改了必须及时发布到本地仓库,比如:maven-web依赖的maven-service修改了,需要及时将maven-service发布到本地仓库。

  • 方法2:在父工程的pom.xml中配置tomcat插件运行,自动聚合并执行

推荐方法2,如果子工程都在本地,采用方法2则不需要子工程修改就立即发布到本地仓库,父工程会自动聚合并使用最新代码执行。

注意:如果子工程和父工程中都配置了tomcat插件,运行的端口和路径以子工程为准。

2.3 聚合与继承的关系

  • 聚合是为了方便快速构件项目。对于聚合模块来说,它知道有哪些被聚合的模块,但那些模块不知道这个聚合模块的存在;
  • 继承是为了消除重复配置。对于继承关系的父POM来说,它不知道有哪些子模块继承于它,但是子模块必须知道自己的父POM是什么。

转载地址:http://ipgzi.baihongyu.com/

你可能感兴趣的文章
Oracle 内置数据类型 -- 字符
查看>>
Oracle 内置数据类型 -- 数值
查看>>
Oracle 内置数据类型 -- 日期时间
查看>>
Oracle 限定返回的结果集 -- ROWNUM
查看>>
Oracle 限定返回的结果集 -- ROW_NUMBER
查看>>
Oracle 集合操作符
查看>>
Oracle SQL中的 IF ELSE
查看>>
Oracle 将null值转化为其他值
查看>>
Oracle 分析函数
查看>>
PL/SQL 数据类型和变量 -- 字符
查看>>
PL/SQL 数据类型和变量 -- 数值
查看>>
Oracle 内置数据类型 -- ROWID
查看>>
PL/SQL 数据类型和变量 -- ROWID
查看>>
PL/SQL 数据类型和变量 -- BOOLEAN
查看>>
Oracle 内置数据类型 -- 大对象
查看>>
Oracle 内置数据类型 -- LONG 和 RAW
查看>>
PL/SQL 数据类型和变量 -- 大对象
查看>>
条件控制语句
查看>>
循环语句
查看>>
PL/SQL 集合 -- 关联数组
查看>>