MAVEN 入门
Maven 翻译为"专家"、“内行”,是 Apache 下的一个纯 Java 开发的开源项目。基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理.
- 教程参考: https://www.imooc.com/learn/443
- 笔记参考: https://blog.csdn.net/qq_44850489/article/details/106742812
- Maven仓库坐标查询: https://mvnrepository.com/
1. 安装
-
进入maven管网,下载想用的maven版本.
-
系统变量中新建:环境变量名:
M2_HOME
变量值:指向刚刚下载文件的安装目录 -
修改系统变量中的path: 在最后加入
;%M2_HOME%/bin
-
验证是否成功:打开命令提示符 输入
mvn -v
出现版本信息就是安装完成 -
修改本地仓库路径: 打开maven安装目录
%M_2HOME%/conf/settings.xml
修改localRepository标签<localRepository>D:/Respository/LocalRespository</localRepository>
-
设置镜像在
%M_2HOME%/conf/settings.xml
修改<mirrors>
标签内容 -
<mirror> <id>nexus-aliyun</id> <mirrorOf>*</mirrorOf> <name>Nexus aliyun</name> <url>http://maven.aliyun.com/nexus/content/groups/public</url> </mirror>
2. 新建maven项目
-
建立maven约定好的文件目录结构[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CLVTNT1n-1600497503169)(C:\Users\x00580500\Documents\笔记图片\maven目录结构.PNG)]
-
编写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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.imooc.maven01</groupId>
<artifactId>maven01-model</artifactId>
<version>0.0.1SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
</dependencies>
</project>
其中
<groupId></groupId> //这个的值就是项目名
<artifactId></artifactId> //这个的值是模块名
<version></version> //这个是版本
<!--[依赖组]-->
<dependencies>
<!--[单个依赖]-->
<dependency>
<groupId> junit </groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
</dependencies>
- 新建src\test\java\com\imooc\maven01\model\HelloWorldTest.java 文件
package com.imooc.maven01.model;
import org.junit.*;
import org.junit.Assert.*;
public class HelloWorldTest{
@TestTest
public void testHello(){
Assert.assertEquals("Hello World",new HelloWorld().sayHello());
}
}
- 新建src\main\java\com\imooc\maven01\model\HelloWorld.java 文件
package com.imooc.maven01.model;
public class HelloWorld{
public String sayHello(){
return "Hello World";
}
}
-
打开命令行 cd到项目的根目录下 然后输入:
mvn compile
。对项目进行编译 -
测试是否ok : 在项目根目录下输入
mvn test
-
打包项目的方法: cd到文件根目录中 输入:
mvn package
-
target 文件夹中生成了项目 的编译文件和 jar包
3. maven常用命令
mvn -v
查看maven版本mvn compile
编译当前项目至taget文件夹
当compile编译时,用到依赖包就去pom.xml中查找,找到后去本地仓库中查找,放到项目中,如果没有就去maven的中央仓库中查找下载到本地仓库,然后引用。
mvn test
运行当前项目测试类mvn package
将当前项目打包至taget文件夹mvn clean
删除target目录,如自解码文件和测试报告mvn install
将本项目编译的jar包安装到本地仓库中
在其它项目引入时需要在pom.xml中指定坐标
<dependency>
<groupId>com.imooc.maven01</groupId>
<artifactId>maven01-model</artifactId>
<version>0.0.1SNAPSHOT</version>
</dependency>
4. maven自动创建目录骨架
使用archetype插件
mvn archetype:generate (第一次加载依赖会很慢)
版本选1.1
Define value for property 'groupId': com.imooc.maven03 //组织名,公司网站的反写+项目名
Define value for property 'artifactId': maven03-service //项目名-模块名
Define value for property 'version' 1.0-SNAPSHOT: : 1.0.0SNAPSHOT //版本号
Define value for property 'package' com.imooc.maven03: : com.imooc.maven03.service //代码所在的包名
或者
mvn archetype:generate -DgroupId=com.imooc.maven03 -DartifactId=maven03-service -Dversion=1.0.0SNAPSHOT
-Dpackage=com.imooc.maven03.service
5. 坐标和仓库
坐标:在maven中每一个插件都可以成为构件 ,每个构件的位置就是坐标(地址)
下面这个被称为基本坐标
<groupId>com.imooc.maven01</groupId>
<artifactId>maven01-model</artifactId>
<version>0.0.1SNAPSHOT</version>
本地仓库和远程仓库
maven的lib目录下的 maven-model-builder jar包里面的pom-4.0.xml 是超级pom,所有的maven项目都会继承这个pom.xml
里面有个url就是maven的中央仓库地址
镜像仓库:中央仓库都是位于国外的,有时访问会出现问题。而镜像仓库就是位于国内的中央仓库
在标签中添加标签 中*表示对所有仓库进行换源
<mirror>
<id>central</id>
<mirrorOf>*</mirrorOf>
<name>Private Public Nexus Mirror.</name>
<!-- http://rnd-itlab.huawei.com:8081/nexus/content/groups/public/ -->
<url>http://w3cloudnkg-sit1.huawei.com/ccloud/nexus/content/groups/public/</url>
</mirror>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
<mirror>
6. IDEA集成maven
File > New > Project > Maven > Create from archetype > maven-archetype-quickstart
在右侧集成Maven可视化工具
7. maven生命周期
maven包含三个生命周期
- clean 清理项目
- default 构建项目
- site 生成项目站点
clean; compile; test; package; install
同一个生命周期中执行后面阶段时会自动执行其前置阶段
clean 清理项目
pre-clean 执行清理前的工作
clean 清理上一次构建生成的所有文件
post-clean 执行清理后的文件
default 构建项目
compile>test>package>install
site 生成项目站点
pre-site
site 生成项目的站点文档
post-site
site-deploy 发布生成的站点到服务器上
8. maven常用元素介绍
常用元素
<project> 约束信息
<modelVersion> 指定当前pom的版本
<groupId> com.imooc.maven03 //组织名,公司网站的反写+项目名
<artifactId> maven03-service //项目名-模块名
<version> 1.0.0SNAPSHOT //版本号 大版本号+分支版本号+小版本号 snapshot快照 alpha内部测试 beta公测 release稳定 GA正式发布
<package> com.imooc.maven03.service //代码所在的包名
<packaging> //默认是jar 也可设置成 war zip pom
<name> 项目描述名
<url> 项目地址
<description> 项目描述
<developers>
<orgnization>
<dependencies>
<dependency>
<groupId>
<artifactId>
<version>
<type>
<scope>
<optional>设置依赖是否可选
<exclusions>排除依赖传递列表
<exclusion>
<dependencyManagement>
<dependencies>
<dependency>s
<build>
<plugins> 插件列表
<plugin>
<groupId>
<artifactId>
<version>
<parent> 对父模块的继承
<modules> 指定多个模块进行编译
<module>
9. maven 依赖范围
标签可用来指定依赖生效范围
compile : 默认范围 编译测试运行都有效
provided : 测试编译有效
runtime: 测试和运行有效
test: 测试范围有效
system: 编译和测试有效 与本机系统相关联 难移植
import: 导入的范围 只使用在dependencyManagement中 表示从其他的pom中导入dependecy的配置
三种classpath
1, 编译
2, 测试
3, 运行
10. 设置maven默认jre依赖
conf>settings.xml
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
11. 依赖冲突
当同时依赖了同一个jar包的不同版本,发生依赖冲突
- 短路优先
A->B->C->X
A->D->X(优先)
- 路径相同时 先声明的优先引入
12. 聚合和继承
12.1 聚合
当有多个maven项目需要同时用maven管理时,
可新建一个项目, aggeration ,让他将bge, nage, shanji一起编译发布.需要将的jar改为pom.
<groupId>com.imooc.maven01</groupId>
<artifactId>maven01-model</artifactId>
<version>0.0.1SNAPSHOT</version>
<packaging>pom</packaging>
并且在pom.xml中的标签中添加项目
当编译时 依次对标签中的项目编译打包
<modules>
<module>../hongxing-bge</module>
<module>../hongxing-nage</module>
<module>../hongxing-shanji</module>
</modules>
当编译时 依次对以上项目编译打包
12.2 继承
像JAVA一样.我们可以将项目中相同的部分提取出来,放到一个新建的父类中
(eg. 当多个项目同时依赖相同的jar包时)
新建parent父类maven项目 并将每个项目都含有的junit放入其中,父类项目不会加载此jar包依赖, 版本号可以定义至标签中后续使用${属性名}方式引用.也需要将父类的改为pom
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<junit.version>3.8.1</junit.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
子类修改
1. 继承的依赖删除版本号(version)标签和范围(scope)标签
2. 在<parent>标签中引入父类坐标