maven是一个工具,可以让程序员们并行开发,从而不影响项目进度,也可以说就是用来管理项目的,它可以简化重复导包,重复代码一系列问题。
远程库: 所谓的远程库,就是maven的核心库,这个库是国外的,里面有很多jar包,国内可以连接,但是只有读取的权限,并且速度很慢,所以在国内,就有一种东西叫代理库,简单来说就是阿里这样的大公司,把这个maven库给映射到国内,你使用这个映射库就可以,但是同样也只有可读的权限。
配置远程库: 可以在maven3.6->conf->setting.xml中找到如下代码(159行),下面红框里的地址,就是一个国内映射地址
本地库: 就是自己在本地配置一个库,简单来说自己就是自己的远程库。
配置本地库: 有一个叫ali_repo的压缩文件,要想在本地配置本地库,就需要在setting.xml文件中指明这个文件的位置,它里面就是各种jar包。
pom文件存在于每个maven项目中,它是一个xml类型的配置文件,里面会写项目的jar包相关信息,继承相关信息,依赖相关信息,后面通过代码来解释。
下面就是一个pom文件:
org.lxh:maven项目发布到库的时候,存储的位置。
mavenTEST01:项目的名称
1.0-SNAPSHOT:项目的版本
<?xml version="1.0" encoding="UTF-8"?>
<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>org.lxh</groupId>
<artifactId>mavenTEST01</artifactId>
<version>1.0-SNAPSHOT</version>
</project>
依赖(dependencies): 简单来说,使用依赖就是引入jar包,之前我们使用复制粘贴的方式,来引入jar包,现在我们使用maven来管理jar包,jar包的声明就在pom.xml文件中。
格式:
<?xml version="1.0" encoding="UTF-8"?>
<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>org.lxh</groupId>
<artifactId>mavenTEST01</artifactId>
<version>1.0-SNAPSHOT</version>
<!--导入依赖 -->
<dependencies>
<!--依赖1,自定义发布到本地库的依赖 -->
<dependency>
<groupId>org.lxh</groupId>
<artifactId>mavenTEST01</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!--依赖2,自springframework本地库的依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.3.11.RELEASE</version>
</dependency>
</dependencies>
</project>
依赖的传递性: a jar包中有三个依赖,b jar包使用了a jar包,那么b也具有a中的三个依赖,如果c又引入了b jar包,那么c中也有这三个依赖。
消除依赖的传递性:
<!--导入依赖 -->
<dependencies>
<!--依赖1,自定义发布到本地库的依赖 -->
<dependency>
<groupId>org.lxh</groupId>
<artifactId>mavenTEST01</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!--依赖2,自springframework本地库的依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.3.11.RELEASE</version>
<!--去除springframework中的spring-core -->
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
继承: 多个程序员进行开发的时候,会出现各个程序员使用的资源版本不一致的问题,这对项目后期的整合是很大的隐患,所以继承就是来解决这个问题的。
实现继承:
当你在父项目中创建一个module,并且把他的父项目选择好的时候,创建成功后,可以在pom文件中看见如下设置:
同时可以在子项目的pom文件中看到如下设置:
可继承内容:
properties—— 在父项目中可以使用该标签在pom文件中定义一些变量,然后再子项目的pom文件中就可以使用该变量,比如我再父项目中使用properties定义了一个spring的version,于是在子项目中,就可以使用特殊的方式来获取这个变量的值,就不用自己来写,确保了版本的一致性。
父项目:
<properties>
<spring-version>4.3.11.RELEASE</spring-version>
</properties>
子项目:
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring-version}</version>
</dependency>
</dependencies>
dependencies—— 父项目的所有依赖都可以被子项目继承,但是这是不合理的,因为子项目中需要的不是全部依赖。
depencyManagement—— 他的作用就是和dependencies一样,需要注意的是,有了它就可以选择继承,子项目只会继承那些在depencyManagement中声明的版本号,然后再子项目中就可以只写groupId artifactId,而version直接继承自父项目
父项目:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.3.11.RELEASE</version>
</dependency>
</dependencies>
</dependencyManagement>
子项目:
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</dependency>
</dependencies>
聚合:
其实就是通过继承,来实现所有maven项目一键化操作,在父项目中,右键构建一个module选择父项目,则所有关系就会给你自动生成好了。
下图可以看到这些就是常用命令
compile:编译maven项目
clean:清空target文件(target文件里保存的是maven项目的所有输出)
test:进行测试的运行,它生成测试报告,方便观察纠错
package:将maven项目打成jar包或者war包,到该运行的服务器运行,提供给其他人使用。例如:打成jar包,交给其他人导入使用,打成war包,放到tomcat中运行。
install:作为库的资源,放到远程库使用,必须满足库资源的结构,当某个项目jar包打包完成,想要放到远程库给别人连接读取使用,必须先经过本地库的安装过程,将项目的jar包作为库的结构生成在本地,才能进行上传发布到远程私服
deploy:当一个maven项目进行安装之后,本地库具备了该项目的所有库资源结果(maven一切皆资源)。可以通过发布命令,将项目的资源上传到远程私服。