1.前言
本篇博客紧接着上一篇博客,把maven的其余知识梳理一下.主要介绍一下Maven中的其他理论知识
2.坐标
2.1 什么是坐标
<span style="font-family:SimSun;font-size:18px;"> <groupId>com.tgb.test</groupId> <artifactId>helloWorld</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> 默认值为jar方式</span>正如上图所示,为了对某一个构建进行唯一的标识,就出现坐标的概念了.通过坐标就可以唯一的找到所需要的构件了.
2.2 依赖范围管理
1.test范围指的是测试范围有效,在编译和打包时都不会使用这个依赖
2.compile:指的是编译范围有效,在编译和打包时都会将依赖存储进去
3.provided:在编译和测试的过程中有效,最后生成war包时不会加入,例如:servlet-api,因为servlet-api在tomact等web服务器已经存在,如果再打包会冲突
4.runtime:在运行时依赖,在编译的时候不会依赖
默认的依赖范围是compile,并且依赖的时候遵循就近原则
2.3 依赖的传递性
在Maven中依赖是会被传递的
A-->C B==>A ==>B-->C 这种依赖是基于compile这个范围进行传递
对于传递的依赖而言,主要是针对compile作用域传递
依赖的解决方法时,路径最短者优先,先声明的优先
2.4 可选性依赖
例如A-->B B-->X(可选) B--Y(可选) 如果标记为可选的话,那么A再依赖B的时候,就不会再依赖X和Y
这时,只要在B中声明X和Y的依赖时,加上一个关键字即可
<span style="font-family:SimSun;font-size:18px;"><span style="font-family:SimSun;font-size:18px;"><dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.7</version> <scope>test</scope> <!-- 可选性依赖 --> <optional>True</optional> <exclusions> <exclusion> <!-- 可以排除依赖 --> <artifactId></artifactId> <!-- 当前pom文件的任意xxx信息 --> <groupId>${project.version}</groupId> </exclusion> </exclusions> </dependency> </dependencies> </span></span>
2.5 排除性依赖比如说A-->B B-->X B-->Y,而此时A并不想依赖于X和Y,那么再A的pom文件中就可以设置排除性依赖
2.6 归类依赖
我们可以在Maven中,一个地方定义属性,然后来管理所有的版本
<span style="font-family:SimSun;font-size:18px;"><span style="font-family:SimSun;font-size:18px;"><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.tgb.test</groupId> <artifactId>helloWorld</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <properties> <!-- 定义属性 --> <junit.version>4.7</junit.version> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <!-- 引用属性版本 --> <version>${junit.version}</version> <scope>test</scope> <!-- 可选性依赖 --> <optional>True</optional> <exclusions> <exclusion> <!-- 可以排除依赖 --> <artifactId></artifactId> <!-- 当前pom文件的任意xxx信息 --> <groupId>${project.version}</groupId> </exclusion> </exclusions> </dependency> </dependencies> </project> </span></span>
3.聚合和继承
3.1 聚合
使用聚合的话,我们就可以在一个模块中,同时把其他模块的包打进来.但是要注意的是,聚合的模块的文件类型必须是pom
<span style="font-family:SimSun;font-size:18px;"><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.tgb.test</groupId> <artifactId>HelloWorldTest1</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <modules> <!-- 聚合是模块的位置 --> <module>../HelloWorldTest1</module> <module>../HelloWorldTest2</module> </modules> </project></span>
3.2 继承使用继承的话,我们可以把所有公共的部分提取出来,放置到parent中来管理,然后子项目直接继承即可
<span style="font-family:SimSun;font-size:18px;"><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.tgb.test</groupId> <artifactId>HelloWorldTest1</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <!-- 要继承的父项目 --> <parent> <groupId>com.tgb.test</groupId> <artifactId>HelloWorld</artifactId> <version>${project.version}</version> <!-- 继承的绝对路径是POM的文件 --> <relativePath>../user-parent/pom.xml</relativePath> </parent> </project></span>
3.3 依赖版本管理我们可以把所有项目中用到的插件的版本在父项目中管理起来.具体看下实例
<span style="font-family:SimSun;font-size:18px;"><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.tgb.test</groupId> <artifactId>helloWorld</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <parent> <groupId>com.tgb.test</groupId> <artifactId>HelloWorld</artifactId> <version>${project.version}</version> <!-- 继承的绝对路径是POM的文件 --> <relativePath>../user-parent/pom.xml</relativePath> </parent> <!-- 属性版本管理 --> <properties> </properties> <!-- 项目版本依赖管理,可以在父项目中添加改配置,并且配置好项目的version 在子项目中可以继承该项目,但是如果不在依赖中添加的话,就不会依赖到,可以做到灵活的配置 --> <dependencyManagement> <dependencies> <dependency> <artifactId></artifactId> <groupId></groupId> <scope></scope> <version></version> </dependency> </dependencies> </dependencyManagement> <modules> <!-- 聚合是模块的位置 --> <module>../HelloWorldTest1</module> <module>../HelloWorldTest2</module> </modules> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.7</version> <scope>test</scope> <!-- 可选性依赖 --> <optional>True</optional> <exclusions> <exclusion> <!-- 可以排除依赖 --> <artifactId></artifactId> <!-- 当前pom文件的任意xxx信息 --> <groupId>${project.version}</groupId> </exclusion> </exclusions> </dependency> </dependencies> </project> </span>
4.小结
本篇主要介绍了,maven的理论知识,但是这些知识是学习maven的重点,一定要掌握好