目录
一、简介
二、POM文件的基本结构
三、依赖的范围
四、依赖的传递
五、依赖的排除
六、继承与聚合
6.1 父工程的一些参数
6.2 子工程的一些参数
七、idea构建maven工程
7.1 创建一个maven工程/父工程
7.2 创建一个maven子工程
7.3 创建依赖关系
随着我们使用越来越多的框架,或者框架封装程度越来越高,项目中使用的jar包也越来越多。我们利用maven可以方便地对依赖进行管理。
另外,maven可以作为构建管理工具。当我们使用 IDEA 在本地进行开发时,构建是 IDEA 替我们做的。如果我们要把代码部署到服务器中,就可以用maven完成打包操作。
pom.xml 配置文件就是 Maven 工程的核心配置文件。其实学习 Maven 就是学这个文件怎么配置,各个配置有什么用。
com.maven
pro01-maven-java
1.0-SNAPSHOT
jar
pro01-maven-java
http://maven.apache.org
UTF-8
junit
junit
4.12
test
junit
junit
4.12
test
compile/test/provided/system/runtime/import
compile:通常使用的第三方框架的 jar 包这样在项目实际运行时真正要用到的 jar 包都是以 compile 范围进行依赖的。比如 SSM 框架所需jar包。这个也是默认值。
test:测试过程中使用的 jar 包,以 test 范围依赖进来。比如 junit。
provided:在开发过程中需要用到的“服务器上的 jar 包”通常以 provided 范围依赖进来。比如 servlet-api、jsp-api。而这个范围的 jar 包之所以不参与部署、不放进 war 包,就是避免和服务器上已有的同类 jar 包产生冲突,同时减轻服务器的负担。说白了就是:“服务器上已经有了,你就别带啦!”
在 A 依赖 B,B 依赖 C 的前提下,C 是否能够传递到 A,取决于 B 依赖 C 时使用的依赖范围。
比如这样的结构,parent依赖son1,son1依赖son2.
当 A 依赖 B,B 依赖 C 而且 C 可以传递到 A 的时候,A 不想要 C,需要在 A 里面把 C 排除掉。而往往这种情况都是为了避免 jar 包之间的冲突。
com.maven
pro01-maven-java
1.0-SNAPSHOT
compile
commons-logging
commons-logging
聚合就是使用一个“总工程”将各个“模块工程”汇集起来,作为一个整体对应完整的项目
Maven工程之间,A 工程继承 B 工程
B 工程:父工程
A 工程:子工程
本质上是 A 工程的 pom.xml 中的配置继承了 B 工程中 pom.xml 的配置。我们可以在父工程中统一管理项目中的依赖信息,具体来说是管理依赖信息的版本。
从继承关系角度来看:
- 父工程
- 子工程
从聚合关系角度来看:
- 总工程
- 模块工程
它的背景是:
它背后的需求是:
通过在父工程中为整个项目维护依赖信息的组合既保证了整个项目使用规范、准确的 jar 包;又能够将以往的经验沉淀下来,节约时间和精力。
注意:父工程的打包方式必须为pom
pom
modules 和 module 标签是聚合功能的配置,这个父工程包含3个子工程
maven-module1
maven-module2
maven-module3
父工程统一管理依赖:
org.springframework
spring-core
4.0.0.RELEASE
org.springframework
spring-beans
4.0.0.RELEASE
org.springframework
spring-context
4.0.0.RELEASE
org.springframework
spring-expression
4.0.0.RELEASE
org.springframework
spring-aop
4.0.0.RELEASE
父工程自定义属性:
UTF-8
4.3.6.RELEASE
设置这个属性就可以动态地管理依赖的版本了,那么依赖的版本号可以这样表示:
org.springframework
spring-core
${spring.version}
com.maven
maven-parent
1.0-SNAPSHOT
maven-module1
在子工程中引用被父工程管理的依赖:
org.springframework
spring-core
org.springframework
spring-beans
org.springframework
spring-context
org.springframework
spring-expression
org.springframework
spring-aop
新建工程->选择maven->next->设置坐标(可选)->完成
在父工程上点击右键->new->module->maven->next->选择Parent->完成
这时parent 和 son 就是父子工程的关系,在父工程的pom.xml中:
maven-son
在子工程的pom.xml中:
maven-parent
com.maven
1.0-SNAPSHOT
假如一个工程要引用另一个工程的依赖,就要在其pom.xml文件中加<dependency>:
<--! 假如是parent工程要引用son工程的依赖 -->
com.maven
maven-son
1.0-SNAPSHOT