目录
随着我们使用越来越多的框架,或者框架封装程度越来越高,项目中使用的jar包也越来越多。我们利用maven可以方便地对依赖进行管理。
另外,maven可以作为构建管理工具。当我们使用 IDEA 在本地进行开发时,构建是 IDEA 替我们做的。如果我们要把代码部署到服务器中,就可以用maven完成打包操作。
pom.xml 配置文件就是 Maven 工程的核心配置文件。其实学习 Maven 就是学这个文件怎么配置,各个配置有什么用。
- <groupId>com.mavengroupId>
- <artifactId>pro01-maven-javaartifactId>
- <version>1.0-SNAPSHOTversion>
-
-
-
-
-
- <packaging>jarpackaging>
-
- <name>pro01-maven-javaname>
- <url>http://maven.apache.orgurl>
-
- <properties>
-
- <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
- properties>
-
-
- <dependencies>
-
- <dependency>
-
-
- <groupId>junitgroupId>
- <artifactId>junitartifactId>
- <version>4.12version>
-
-
- <scope>testscope>
- dependency>
- dependencies>
- <groupId>junitgroupId>
- <artifactId>junitartifactId>
- <version>4.12version>
- <scope>testscope>
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 包之间的冲突。
- <dependency>
- <groupId>com.mavengroupId>
- <artifactId>pro01-maven-javaartifactId>
- <version>1.0-SNAPSHOTversion>
- <scope>compilescope>
-
- <exclusions>
-
- <exclusion>
-
- <groupId>commons-logginggroupId>
- <artifactId>commons-loggingartifactId>
- exclusion>
- exclusions>
- dependency>
聚合就是使用一个“总工程”将各个“模块工程”汇集起来,作为一个整体对应完整的项目
Maven工程之间,A 工程继承 B 工程
B 工程:父工程
A 工程:子工程
本质上是 A 工程的 pom.xml 中的配置继承了 B 工程中 pom.xml 的配置。我们可以在父工程中统一管理项目中的依赖信息,具体来说是管理依赖信息的版本。
从继承关系角度来看:
- 父工程
- 子工程
从聚合关系角度来看:
- 总工程
- 模块工程
它的背景是:
它背后的需求是:
通过在父工程中为整个项目维护依赖信息的组合既保证了整个项目使用规范、准确的 jar 包;又能够将以往的经验沉淀下来,节约时间和精力。
注意:父工程的打包方式必须为pom
- <packaging>pompackaging>
modules 和 module 标签是聚合功能的配置,这个父工程包含3个子工程
- <modules>
- <module>maven-module1module>
- <module>maven-module2module>
- <module>maven-module3module>
- modules>
父工程统一管理依赖:
- <dependencyManagement>
- <dependencies>
- <dependency>
- <groupId>org.springframeworkgroupId>
- <artifactId>spring-coreartifactId>
- <version>4.0.0.RELEASEversion>
- dependency>
- <dependency>
- <groupId>org.springframeworkgroupId>
- <artifactId>spring-beansartifactId>
- <version>4.0.0.RELEASEversion>
- dependency>
- <dependency>
- <groupId>org.springframeworkgroupId>
- <artifactId>spring-contextartifactId>
- <version>4.0.0.RELEASEversion>
- dependency>
- <dependency>
- <groupId>org.springframeworkgroupId>
- <artifactId>spring-expressionartifactId>
- <version>4.0.0.RELEASEversion>
- dependency>
- <dependency>
- <groupId>org.springframeworkgroupId>
- <artifactId>spring-aopartifactId>
- <version>4.0.0.RELEASEversion>
- dependency>
- dependencies>
- dependencyManagement>
父工程自定义属性:
- <properties>
- <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
-
-
- <spring.version>4.3.6.RELEASEspring.version>
- properties>
设置这个属性就可以动态地管理依赖的版本了,那么依赖的版本号可以这样表示:
- <dependency>
- <groupId>org.springframeworkgroupId>
- <artifactId>spring-coreartifactId>
- <version>${spring.version}version>
- dependency>
- <parent>
-
- <groupId>com.mavengroupId>
- <artifactId>maven-parentartifactId>
- <version>1.0-SNAPSHOTversion>
- parent>
-
- <artifactId>maven-module1artifactId>
在子工程中引用被父工程管理的依赖:
- <dependencies>
- <dependency>
- <groupId>org.springframeworkgroupId>
- <artifactId>spring-coreartifactId>
- dependency>
- <dependency>
- <groupId>org.springframeworkgroupId>
- <artifactId>spring-beansartifactId>
- dependency>
- <dependency>
- <groupId>org.springframeworkgroupId>
- <artifactId>spring-contextartifactId>
- dependency>
- <dependency>
- <groupId>org.springframeworkgroupId>
- <artifactId>spring-expressionartifactId>
- dependency>
- <dependency>
- <groupId>org.springframeworkgroupId>
- <artifactId>spring-aopartifactId>
- dependency>
- dependencies>
新建工程->选择maven->next->设置坐标(可选)->完成
在父工程上点击右键->new->module->maven->next->选择Parent->完成
这时parent 和 son 就是父子工程的关系,在父工程的pom.xml中:
- <modules>
- <module>maven-sonmodule>
- modules>
在子工程的pom.xml中:
- <parent>
- <artifactId>maven-parentartifactId>
- <groupId>com.mavengroupId>
- <version>1.0-SNAPSHOTversion>
- parent>
假如一个工程要引用另一个工程的依赖,就要在其pom.xml文件中加<dependency>:
- <--! 假如是parent工程要引用son工程的依赖 -->
- <dependency>
- <groupId>com.mavengroupId>
- <artifactId>maven-sonartifactId>
- <version>1.0-SNAPSHOTversion>
- dependency>