1. Maven的概念
1.1. 什么是Maven
Maven是跨平台的项目管理工具。主要服务于基于Java平台的项目构建,依赖管理和项目信息管理。
理想的项目构建:高度自动化,跨平台,可重用的组件,标准化的流程
maven能够自动下载依赖,并且对依赖进行统一的管理
1.2. 什么是依赖管理
对第三方依赖包的管理,可以连接互联网下载项目所需第三方jar包。
对自己开发的模块的管理,可以像引用第三方依赖包一样引用自己项目的依赖包。
maven对于项目所需的依赖,会首先从本地仓库下载,如果本地仓库没有,则会从maven的中央仓库下载
下载之后,如果对该依赖二次使用,则直接从本地仓库获取
1.3. 什么是项目构建
项目构建:是一个从编写源代码到编译、测试、运行、打包、部署的过程
传统项目和maven项目构建的两种方式
传统项目:
打开Idea编写源代码和配置文件,对源代码进行编译,可以使用Junit进行单元测试,把项目打成war包,部署到Tomcat服务器中运行。
maven项目:
maven将项目构建过程进行标准化,每个阶段都可以使用一个命令来完成。
清理 --> 编译 --> 测试 --> 报告 --> 打包 --> 部署
maven进行项目管理的好处:
可以通过命令完成项目构建。(测试:使用mvn tomcat:run的命令来发布运行项目)
maven对每个构建阶段进行规范,有利于大型团队协作开发。
maven进行项目构建的过程:
1.4. Maven的应用场景
maven的应用场景,开发人员只要按着maven标准的目录结构进行开发即可,然后提交代码。测试人员在测试服务器上拉取Java源码,然后可以使用maven的自动化项目构建完成项目的清理、编译、测试、打包和安装部署等。
每个人的IDE配置都不同,很容易就出错出现本地代码换个地方编译,程序无法执行的问题,测试人员通过maven就可以避免不同系统环境所带来的程序无法执行的问题
1.5. 为什么使用Maven
- 拥有约定,知道你的代码在哪里,放到哪里去
- 拥有一个生命周期,例如执行 mvn install 就可以自动执行编译,测试,打包等构建过程
- 只需要定义一个pom.xml,然后把源码放到默认的目录,Maven帮你处理其他事情
- 拥有依赖管理,仓库管理
1.6. Maven模型
POM项目管理模型: Project Object Model
maven主要是通过pom.xml文件进行项目和依赖管理
2. 初识Maven
2.1. Maven安装
2.1.1. 安装准备
1.安装jdk1.8或以上版本
2.下载maven
Maven – Download Apache Maven
3.6.0版本下载地址:Index of /dist/maven/maven-3/3.6.0/binaries
3.安装maven
并将maven解压到相应目录下,注意目录需要为无中文路径
2.1.2. Maven安装目录分析
bin:含有mvn运行的脚本 可执行性程序
boot:含有plexus-classworlds类加载器框架
conf:含有settings.xml配置文件
lib:含有Maven运行时所需要的java类库
LICENSE.txt, NOTICE.txt, README.txt针对Maven版本,第三方软件等简要介绍
2.1.3. Maven的环境变量
1. 设置MAVEN_HOME环境变量
升级时只需要下载最新版本,解压缩重新设置MAVEN_HOME环境变量即可
设置MAVEN_HOME环境变量,把maven的解压后的路径添加为变量值
设置Path环境变量,把 %MAVEN_HOME%\bin 添加到Path的变量值末尾,与前面的内容用 ; 隔开,如图:
2.设置MAVEN_OPTS环境变量(可忽略)
-Xms128m -Xmx512m
3.配置用户范围的settings.xml
%MAVEN_HOME%/conf/settings.xml 全局的
~/.m2/settings.xml 单个用户的
setting文件中需要配置的内容
需要配置mirrors镜像,如果不配置默认为国外镜像
<mirror><id>alimaven</id><mirrorOf>central</mirrorOf><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/repositories/central/</url></mirror> 阿里镜像,通过该镜像联网,进行jar包的上传和下载操作
需要配置本地仓库localRepository
<localRepository>D:\repository360</localRepository> 其中为本地仓库的地址
4.验证配置是否完成
mvn-version
2.2. Maven的第一个项目
2.2.1. 按照约定创建Maven项目目录
java项目的目录结构
src/main/java —— 存放项目的.java文件
src/main/resources —— 存放项目资源文件,如spring, mybatis配置文件
src/test/java —— 存放所有测试.java文件,如JUnit测试类
src/test/resources —— 测试资源文件
target —— 项目输出位置
pom.xml
创建一个Hello项目 项目的结构如下:
--src
-----main
----------java
----------resources
-----test
---------java
---------resources
--pom.xml
2.2.2. 在项目Hello根目录建立pom.xml
<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>cn.tx.maven</groupId><!--项目包的坐标 jar包在本地仓库的存放地址--><artifactId>Hello</artifactId><!--项目名称--><version>0.0.1-SNAPSHOT</version><!--地址--><name>Hello</name><dependencies><dependency><!--依赖--><groupId>junit</groupId><artifactId>junit</artifactId><version>4.9</version><scope>test</scope><!--依赖的作用范围,只在测试期间--></dependency> </dependencies>
</project>
2.2.3. 创建Hello.java文件
在src/main/java/cn/tx/maven目录下新建文件Hello.java
package cn.tx.maven;
public class Hello {public String sayHello(String name){return "Hello "+name+"!";}
}
2.2.4. 创建HelloTest.java文件
在/src/test/java/cn/tx/maven目录下新建测试文件HelloTest.java
package cn.tx.maven;
import org.junit.Test;
public class HelloTest {@Testpublic void testHello(){Hello hello = new Hello();String results = hello.sayHello("maven");assertEquals("Hello maven!",results); }
}
2.2.5. 进行maven的项目操作
1. 打开cmd命令行,进入Hello项目根目录执行 mvn compile命令,查看根目录变化
因为配置环境成功,所以mvn命令能够顺利执行,complie编译项目,产生target文件 说明项目创建成功
2. cmd 中继续录入mvn clean命令,然后再次查看根目录变化
清理target目录,主要用于清除项目的构建输出
target目录中有jar包和其他附加文件
3. cmd 中录入 mvn clean compile命令, 查看根目录变化
先清理,再编译
4. cmd 中录入 mvn clean test命令,查看根目录变化
执行测试代码,产生测试结果
5. cmd 中录入 mvn clean package命令,查看根目录变化
项目打包 执行清理,编译,测试,打包命令
6.cmd 中录入 mvn clean install 查看仓库
本地仓库显示
仓库中会产生封装好的jar包
2.3. Maven的第二个项目
2.3.1. 按照约定创建Maven项目目录
HelloFriend
--src
-----main
----------java
----------resources
-----test
---------java
---------resources
--pom.xml
2.3.2. 在项目HelloFriend根目录建立pom.xml
在项目HelloFriend根目录建立pom.xml
<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"> xml约束信息(xml笔记)<modelVersion>4.0.0</modelVersion><groupId>cn.tx.maven</groupId><artifactId>HelloFriend</artifactId><version>0.0.1-SNAPSHOT</version><name>HelloFriend</name><dependencies> 依赖<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.9</version><scope>test</scope> 只在测试有效</dependency> <dependency><groupId>cn.tx.maven</groupId> 项目的包名<artifactId>Hello</artifactId><version>0.0.1-SNAPSHOT</version><scope>compile</scope></dependency> </dependencies>
</project>
2.3.3. 创建HelloFriend.java文件
在src/main/java/cn/tx/maven目录下新建文件HelloFriend.java
package cn.tx.maven; 类的包名import cn.tx.maven.Hello;public class HelloFriend {public String sayHelloToFriend(String name){Hello hello = new Hello();String str = hello.sayHello(name)+" I am "+this.getMyName();System.out.println(str);return str;}public String getMyName(){return "John";}}
2.3.4. 创建HelloFriendTest.java文件
在/src/test/java/cn/tx/maven目录下新建测试文件HelloFriendTest.java
package cn.tx.maven;import static junit.framework.Assert.assertEquals;import org.junit.Test;import cn.tx.maven.Hello;public class HelloFriendTest {@Testpublic void tesHelloFriend(){HelloFriend helloFriend = new HelloFriend();String results = helloFriend.sayHelloToFriend("zhangsan");assertEquals("Hello zhangsan! I am John",results); }
}
2.3.5. 测试打包HelloFriend项目
在HelloFriend目录下执行命令mvn package
若系统报错提示:Could not find artifact cn.tx.maven:Hello:jar:0.0.1-SNAPSHOT,表示无法找到HelloFriend所依赖的Hello 0.0.1-SNAPSHOT.jar
故此我们需要重新构建第一个项目Hello并安装到数据仓库,在命令行Hello根目录下执行mvn clean install
对Hello项目进行清理并安装后,对HelloFriend项目再次进行打包
可以看到本次打包成功,说明HelloFriend项目已经可以加载Hello项目所打包的jar包
在文件夹创建的Hello项目可以通过以下两种方式打开
1.选择Open,再选择Hello项目的地址
2.选择Import Project 在选择pom.xml的地址
一直点击下一步,最后打开文件
2.4. Maven仓库配置
2.4.1. Maven仓库概念
何为Maven仓库?
用来统一存储所有Maven共享构建的位置就是仓库
Maven仓库布局
根据Maven坐标定义每个构建在仓库中唯一存储路径
包名 项目名 版本
groupId/artifactId/version/artifactId-version.packaging
groupId
定义:groupId 是 Maven 项目坐标的第一个部分,它通常表示项目的组织或公司的域名反转写法。例如,如果你为公司 example.com 开发软件,groupId 可能是 com.example。
作用:groupId 被用来组织和分组相关的 Maven artifacts,这样可以避免命名冲突。它也影响了本地仓库和远程仓库中 Maven 构件的存储路径。
artifactId
定义:artifactId 是 Maven 项目坐标的第二个部分,它表示具体的项目或模块的名字。
作用:artifactId 标识了项目中的一个特定模块或组件。在一个大型项目中,可能会有多个子模块,每个子模块都有自己的 artifactId。
比如针对微服务项目,每个模块都是不一样的名字,而artifactId就是识别各个模块的,每个模块下的pom.xml都是不一样的
version
定义:version 是 Maven 项目坐标的最后一个部分,它表示项目的当前版本号。
作用:version 用于标识项目的不同发布版本。在 Maven 项目中,版本号非常重要,因为它决定了依赖项的精确版本,确保了构建的一致性和可重复性。
不同的依赖或者插件都拥有其自己的版本号,不同的版本号会有不一样的内容,团队项目中必须保证每一个人的版本必须一致
name
定义:name 是一个描述性的字段,它用于给项目一个易于理解的名字。
作用:name 并不是 Maven 坐标的一部分,但它会在某些地方显示,比如在生成的文档中,或者作为项目的描述性标签。它有助于提高项目的可读性和可识别性。
仓库的分类(两大类)
本地仓库
• ~/.m2/repository/ 可修改(默认)
• 每个用户只有一个本地仓库
远程仓库
• 中央仓库:Maven默认的远程仓库
http://repo1.maven.org/maven2
• 私服:是一种特殊的远程仓库,它是架设在局域网内的仓库
• 阿里云
• 腾讯云
• 华为云
都是开源的
公司内部不开源的仓库属于私服
2.4.2. Maven本地仓库配置
1. 全局本地仓库(所有操作系统用户均影响)
%MAVEN_HOME%\conf\settings.xml文件,修改该文件会影响所有使用该Maven的用户的本地仓库,例如:
2. 用户本地仓库(仅影响使用该配置文件的用户或程序)
该文件可以在任意目录,例如:
3. 修改配置文件设置Maven本地仓库(以全局设置为例)
编辑D:\TOOLS\maven\apache-maven-3.5.4\conf\settings.xml文件
找到如下位置:
修改为:
保存退出即可
以上配置表示所有使用该Maven的程序或用户,如未单独配置,则默认加载以上目录的本地库文件;
2.5. IDEA整合Maven项目
2.5.1. IDEA的Maven全局配置
启动IDEA后找到Settings
以上设置完成表示在本idea上,所有项目如未对Maven的配置进行单独配置,则默认均使用该Maven版本和本地库设置;
2.5.2. IDEA创建Maven的Java项目 MavenJava项目
至此Maven的Java项目创建完成
测试Maven的jar包引入
通常选择自动导入
以上,在IDEA上使用Maven进行Java项目的创建及测试已完成!
2.5.3. IDEA创建Maven的Java web项目 MavenJavaWeb项目
配置完毕后会进行web项目的初始化,初始化过程取决于本地库是否已生成及网络情况,推荐使用课程提供的Maven本地库
如果创建项目速度非常慢,并且在Generating project in Batch mode卡住,则进行全局设置如下:
-DarchetypeCatalog=local从本地检索下载
以上web项目则创建成功,接下来需要进行一些配置来确定web项目可以正常运行
添加war包的方法:
配置web服务器
添加本地tomcat配置
测试项目运行
至此,在IDEA上使用Maven配置的Java web工程已经完成配置
2.5.4. IDEA导入既有Maven项目
以导入刚才的Maven项目的例子做示范:
导入引入依赖Hello项目的HelloFriend项目,可以看到Hello项目已经被打成jar包引用到HelloFriend的Maven依赖中
2.6. Maven项目视图
Maven项目视图主要用于查看该maven项目的各项属性,同时也可以进行一些常见的maven的操作,比如打包,清理,测试等等;
maven视图的两种打开方式
第一种
第二种