Java中Maven基础详解(包括maven工作原理、安装配置、IDEA建立Maven工程)
文章目录
当前主要的Java构建工具
- Maven,Gradle,Ivy,Builder,Ant等
- 其中,Maven是B/S项目主流,Gradle常用于移动开发
Maven基本概念:
- apache组织提供的一个顶级项目,由Java开发
- 作用:
- 管理项目构建生命周期
- 管理项目中jar(核心功能)。自动帮程序员甄别和下载第三方库(jar)
- 管理项目基础信息(文档管理、测试报告)
可以说,maven作用于Java平台的项目构建,依赖管理和项目信息管理。
1、项目构建生命周期:
[清理]–>[编译]–>[测试]–>[报告]–>[打包]–>[安装]–>[发布]
[clean]–>[compile]–>[test]–>[report]–>[package]–>[install]–>[publish]
2、项目中jar包管理
Maven工作原理:
在项目中,需要使用到第三方库(即第三方jar包),传统做法:自己去网上查找需要的jar包,下载到本地,进行配置,设置好地址,导入jar包,才能使用。这种传统做法存在两个问题:
1、查找jar包、下载、配置麻烦;
2、需要把jar包放置在合适的路径。当项目发送给其他机器时,可能会因为jar包地址报错。(例如,自己把jar包放在f盘,发送给其他电脑时,没有f盘,这时候编译时就会发生报错)
在项目构建工具Maven下,就可以避免这个问题,这也是Maven的核心功能所在:管理第三方jar包。
在Maven项目下,只需要网上在Maven仓库中搜索所需的jar包,将jar包的依赖信息复制在pom.xml文件中。这样,在项目编译时,maven会自动检索本地计算机是否含有所需jar包,如果没有,在私服仓库中查找jar包(即局域网内),都没有的话,就从Maven中央仓库中自动下载jar包。
由于Maven中央仓库服务器在国外,下载时速度可能比较慢,这时候可以选择国内一些有名的Maven仓库,如阿里云。
Maven中jar包的获取过程如下:
[本地仓库]–>[局域网私服仓库]–>[中央仓库]
3、Maven项目信息管理
- api文档
- 测试报告
Maven安装与配置
安装 解压即可
注:现在IDEA,eclipse都自带Maven,如非必要,不必安装更换maven。IDEA中Maven的默认路径在IDEA安装目录下:ideaIU-2020.2.3.win\plugins\maven\lib\maven3
查看版本号:在maven3/bin目录下,调出cmd,输入mvn -v
所以Maven原本是不需要配置的。只是为了在任何路径下都可以使用Maven命令,所以需要配置
配置
- JAVA_HOME
- MAVEN-HOME:Maven安装地址
- [path] %MAVEN-HOME%\bin
1、JAVA_HOME在安装jdk时已经配置,故而不需要配置
2、MAVEN-HOME配置。在此电脑-属性-高级系统设置-系统属性中,点击环境变量,
在下方系统变量中,新建,变量名MAVEN-HOME,变量值填IDEA中maven的地址
3、[path]。系统变量中找到Path,双击进去,新建,输入%MAVEN-HOME%\bin
,配置完成。
在cmd窗口中输入mvn -v
,查看maven版本号,
表示配置成功。
Maven本地仓库配置
本地仓库默认位置:
C:\Users\Administrator\.m2\repository
重新设置Maven本地仓库地址
Maven安装路径\conf\setting.xml中定位标签
#53 <localRepository>/path/to/local/repository</localRepository>
重新设置本地仓库位置
<localRepository>D:\DevTools\ideaIU-2020.2.3.win\plugins\maven\repository</localRepository>
阿里云镜像设置
在mirror位置(大约160行左右)添加阿里云镜像
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
Maven工程结构
-
Maven可以管理的工程,必须按照【约定结构】来创建
-
结构
-
src:(Java代码)
-
main文件夹:主要开发 业务程序
-
java(创建Java文件)
Java文件创建package,如 src\main\java\com\bjpowernode\model\Student.java
-
resources(存放程序资源文件(配置文件,properties))
-
-
test:主要进行测试 单元测试程序
-
Java(创建测试类)
Java文件创建测试类,如 src\main\java\com\bjpowernode\model\TestMain.java
-
resources(存放测试程序资源文件(测试时使用的配置文件))
-
-
-
target文件夹:(编译后class文件,在创建项目时,不需要创建。Maven命令在执行时自动创建target)
目录如图:
-
pom.xml:(核心配置文件:主要用来向Maven讨要jar包)(Project Object Model)
-
eg:记事本开发Maven工程
Student.java
package com.bjpowernode.model;
public class Student{
public void sayHello(){
System.out.print("Hello Maven");
}
}
TestMain.java
package com.bjpowernode.test;
import com.bjpowernode.model.Student;
import org.junit.Test;
public class TestMain{
@Test
public void myTest (){
Student stu=n ew Student();
stu.sayHello();
}
}
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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion> //固定不变的
//这三行是定位package的,简称gav
<groupId>com.bjpowernode</groupId> //域名
<artifactId>Maven_Project</artifactId> //项目名,不能有中文
<version>6.0</version> //版本号
//<package>war</package> //这一行通常为默认jar或war,需要时手动添加
//添加依赖
<dependencies>
//所需的依赖可以到百度Maven Repository,搜索相关包名,获取gav
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
常见Maven命令:(与项目构建生命周期相关)
1、mvn clean 删除当前工程中target
2、mvn compile 将当前工程中main文件下的所有java编译为class,输送到target文件中
3、mvn test 运行test文件下所有测试文件
4、mvn package 首先将test文件下所有的java测试类的方法调用执行进行测试,并生成[测试报告]。如果测试没有问题,将main文件下所有class文件打成(jar/war),然后输送到target
5、mvn install 与package命令执行基本一致,将[jar\war]推送到Maven的本地仓库
Maven坐标(gav)
为了方便Maven对jar的定位,在Maven世界中,每一个jar都要由一个独立坐标,相当于ip
artifact:构建
这个独立坐标由三部分组成
1. <groupId>公司域名反顺序</groupId> 组织
2. <artifactId>项目名称</artifactId> 产品名称
3. <version>项目版本号</version> 版本
Maven开发流程
- 新建Maven项目
- 在中央仓库查找第三方jar的依赖文本
- 拷贝依赖文本至项目的pom.xml
- 执行Maven,编译/构建整个项目
IDEA建立Maven工程(以2020.2版为例,其他版本大同小异)
打开IDEA,选择创建Maven工程
选择jdk1.8,勾选Create from archetype,这里选择创建普通的maven项目,并不涉及java web项目,所以选择quickstart,如果要创建web项目,选择下面的webapp,点击next。
在这一页中,点击Artifact Coordinates,展开,这里的groupID,artifactid,version就是之前提到的gavmaven坐标,填好后进入下一步next。
这里,User settings file选择c盘默认即可,Local repository选择上面你自己更改的repository,点击finish,即完成maven项目的构建。
第一次配置Maven工程,需要等待一会(1分钟左右),出现BUILD SUCCESS,即创建成功。
在main中Java中写java代码,将所需的依赖在pom.xml中写入。
eg:求两个数的最大公约数。
Java自带的jdk没有求最大公约数的函数,Apache组织中有个org.apache.commons中有个求最大公约数的方法(这里不必死记硬背函数库,需要时上网查找即可,这里只是举个例子)
百度Maven repository,进入Maven,搜索org.apache.commons,如图
点击第一个进入,选择使用量较高的版本,复制依赖项。
然后在pom.xml中中粘贴依赖项
<!--apache扩展数学工具包-->
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-math3 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-math3</artifactId>
<version>3.6.1</version>
</dependency>
在main-java中创建类hello,使用org.apache.commons中的方法,跟使用jdk自带方法一样
public static void main(String[] args) {
//计算两个整数的公约数
int a = ArithmeticUtils.gcd(361, 285);
System.out.println("a = " + a);
}
即可求出两个数的最大公约数,是不是很简便。
此外,在IDEA的右侧,有个Maven选项,点击查看。
在Lifecycle中包括上面提及的Maven命令,点击即可执行Maven命令。
**注意:**在每次添加依赖项后,最好手动点击Maven左上角的刷新按钮,以方便maven下载依赖项,以免报错