2022/3/26
一、Maven一款开源的项目管理工具
Maven中每一个项目都相当于是一个对象,对象和对象之间是有关系的。关系包含了:依赖,继承,聚合,实现Maven项目可以更加方便的实现导jar包,拆分项目等效果。
二、Maven仓库
基于简单文件系统存储的,集中化关闭Java API资源(构件)的一个服务。
仓库中的任何一个构件都有其唯一的坐标,根据这个坐标可以定义其在仓库中唯一存储路径。得益于Maven的坐标机制,任何Maven项目使用任何一个构件的方式都是完全相同的。
Maven可以再某个位置统一存储Maven项目共享的构件,这个统一的位置就是仓库,项目构件完毕后生成的构件也可以安装或者部署到仓库中,供其他项目使用。
对于Maven来说,仓库分为两类:本地仓库和远程仓库(从远程仓库中拿到放到本地仓库中便于使用)
* 远程仓库:不在本机的就是远程仓库:分为中央仓库和本地私服仓库
远程仓库是指通过各种协议,如file://和http://访问的其他类型的仓库。
其他的也有可能是自己公司的私服,自己公司在局域网搭建的maven仓库,用来在开发团队间共享私有构件和管理发布的。
默认的远程仓库使用的Apache提供的中央仓库:
https://mvnrepository.com/
* 本地仓库:指本机的一份拷贝,用来缓存远程下载,包含尚未发布的临时构件。
* 镜像仓库:仓库A可以提供仓库B的所有内容,A就是B的镜像仓库
在国内连接中央仓库下载依赖,有时会由于一些特殊原因下载速度非常慢。所以我们可以使用阿里云提供的镜像仓库来替换中央仓库。
* 仓库优先级别:
最先是本地仓库--> 到配置文件中指定的仓库中--> 有镜像仓库找镜像仓库没有就找中央仓库
三、Maven工程类型
1.POM工程:逻辑工程,用在父级工程后聚合工程中。用来做jar包的版本控制。
2.JAR工程:会打包成jar,用做jar包使用,常见的本地工程-->Java Project
3.WAR工程:将会打包成war,发布在服务器上的工程。
* 创建Maven工程
GroupID:类似包名
Atifactld:一般使用项目名字
Version:版本
* Maven目录结构:
*src/main/java:这个目录下储存java源代码
*src/main/resources:储存主要的资源文件。比如xml配置文件和properties文件
*src/test/java:储存测试用的类,比如JUNIT的测试一般就放在这个目录下面
因为测试类本身实际是不属于项目的,所以放在任何一个包下都显得很尴尬,所以maver专门创建了一个测试包用于存放测试的类
*src/test:这个下面可以自己创建你,储存测试环境用的资源文件
*src:包含了项目所有的源代码和资源文件,以及其他项目相关的文件。
*target:编译后内容放置的文件夹(这个刚创建不显示,需要点击右边的maven/install)
四、maven工具基于POM(项目对象模型)模式实现的
在Maven中每一个项目都相当于是一个对象,他们之间的关系包含了依赖,继承,聚合。
1.依赖关系:
A依赖于B,B注入A(导jar包)
如何注入依赖,pom.xml文件,根元素project下的dependencies标签下可以包含多个dependence元素,声明多个依赖。可以依赖自己项目打包的jar包,也可以依赖中央仓库的,只需要导入jar包坐标即可。
https://mvnrepository.com/artifact/org.mybatis/mybatis (这里可以找到)
<?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>ln.java</groupId>
<artifactId>MavenDemo01</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
</dependencies>
</project>
注意:一开始导入中央仓库,却报错了,原因是我一开始就install打包了,所以导入的时候出错,解决办法是clean一下就好了。
依赖的好处:省去了程序员手动添加jar包的操作,省事!并且可以帮我们解决jar包冲突问题。
依赖的传递性:
如果项目1依赖mybatis工程,项目2依赖项目1,那么项目2也依赖mybatis工程
做法:
1.先将项目1打包,要先清除一下面前的jar,clean一下,再install打包。
2.让项目2 依赖项目1<dependencies> <dependency> <groupId>ln.java</groupId> <artifactId>MavenDemo01</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies>
依赖的两个原则:
1.最短路径优先原则:项目依赖关系树种路径最短的版本会先被使用。
2.最先声明原则:若两个路径一样长,那么则使用在POM.xml中先声明的那个。
排除依赖:若有两个依赖包,想排除一个。则可以使用exclusion标签
<dependencies> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.6</version> <exclusions> <groupId>ln.java</groupId> <artifactId>MavenDemo01</artifactId> </exclusions> </dependency> </dependencies>
依赖范围:
1.compile:编译和运行时都生效。(默认)
2.provided:编译和测试的时候。
3.runtime:运行时。
4.system:和provided类似,不过需要指定一个本地系统路径的JAR,通过systemath元素显式地指定依赖文件的路径。
5.test:编译测试代码和运行测试代码的时候。
6.import:只适用于pom文件中的<dependencyManagement>部分
* 这里表示父工程有这个以后,子工程可以决定父工程用哪个版本的jar
定义一个父工程/打包(继承)<?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>ln.java</groupId> <artifactId>MavenDemo01</artifactId> <version>1.0-SNAPSHOT</version> <properties> <banben>3.5.6</banben> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>${banben}</version> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> </project>
子工程
<?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>ln.java</groupId> <artifactId>MavenDemo02</artifactId> <version>1.0-SNAPSHOT</version> //父工程 <parent> <groupId>ln.java</groupId> <artifactId>MavenDemo01</artifactId> <version>1.0-SNAPSHOT</version> <relativePath>../MavenDemo01/pom.xml</relativePath> </parent> <dependencies> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.4</version> </dependency> </dependencies> </project>
2.聚合关系:
当我们开发的工程用有2个以上模块的时候,每个模块都是一个独立的功能集合。这时候我们需要一个聚合工程。
在创建聚合工程的时候,总的工程必须是一个POM工程。
* <packaging>pom</packaging>
聚合项目必须是一个pom类型的项目,各子模块可以是任意类型的模块。
前提:继承
聚合包含子继承的特性。
聚合时多个项目的本质还是一个项目,这些项目被一个大的父项目包含。且这时父项目类型为pom类型。同时在父项目的pom.xml中出现<modules>表示包含的所有子模块。
五、编译器插件
1.settings.xml是设置全局的
2.配置编译器插件:pom.xml中可以配置(局部的jdk使用)
3.一般打包只会打包resources包下的配置文件
4.资源拷贝插件:pom.xml中可以配置(配置的路径下的配置文件在打包时也会被打包)
5.Tomcat插件:直接在maven项目中配置即可使用tomcat
Maven -Maven配置tomcat插件 两种 - lilixia - 博客园 (cnblogs.com)
六、Maven常见命令
1.install:mvn install
本地安装,包含编译,打包,安装到本地仓库
编译 -javac
打包 -jar
2.clean:清除已编译的信息,删除工程中的target目录
3.compile:只编译。
4.package:打包,包含编译和打包。
它和Install的区别是它没有把打好的jar包部署到本地仓库和远程仓库。
install把打好的包部署到本地仓库去了,但没有部署远程仓库。
更多推荐