目录
1. Maven
Maven是Apache软件基金会组织维护的一款自动化构建工具,
Maven 专注于服务Java平台的项目构建和依赖管理
1.1 依赖管理
Dependency Management(依赖管理)是指在软件工程中,管理各种组件或库之间的依赖关系以确保程序正确运行的过程。在现代软件开发中,大多数应用都利用了众多的开源组件和库,这些组件通常被保存在中央仓库中,而且相互之间有着复杂的依赖关系。因此,一个成功的项目需要一个强大的依赖管理系统来管理这些依赖项并确保应用程序的正确性
1.2 项目构建
构建:指的是项目从编译、测试、运行、打包、安装 ,部署整个过程都交给 maven 进行管理,这个过程称为构建。
具体如下:
- 清理:删除以前的编译结果,为重新编译做好准备。
mvn clean
- 编译:将Java源程序编译为字节码(.class)文件
mvn compile
- 测试:针对项目中的关键点进行测试,确保项目在迭代开发过程中关键点的正确性。
mvn test
- 报告:在每一次测试后以标准的格式记录和展示测试结果
- 打包:将一个包含诸多文件的工程封装为一个压缩文件用于安装和部署。Java工程对应jar包,web工程对应war包
mvn package
- 安装:在Maven环境下特指将打包的结果jar或war包安装到本地仓库
- 部署:将打包的结果部署到远程仓库或将war包部署到服务器上运行
mvn install
创建的构建工具有
- ant
- maven
- Gradle
1.3 核心概念
Maven能够实现自动化构建上级和它的内部原理分不开的,
Maven的核心概念为:
-POM
- 约定的目录结构
- 坐标
- 依赖管理
- 仓库管理
- 生命周期
- 插件和目标
- 继承
2. Maven的安装和配置
2.1 在官网下载
2.2 解压文件
解压后Maven的目录结构如下:
2.3配置环境变量
打开电脑的环境变量添加如下:
配置Path路径:
测试Maven的安装
打开命令行,输入mvn -version
即可看到maven的版本和其他
3. Maven的配置文件
3.1配置文件
maven的配置文件有两个
- 全局配置文件:maven下载目录下./conf/setting.xml
- 用户配置文件:宿主目录下, ~/.m2/settings.xml(idea中默认使用的文件)
3.2 仓库
3.2.1本地仓库
本地仓库相当于一个缓存,在电脑上是一个文件夹,我们可以设置这个文件夹的路径,工程第一次需要某种jar包时,会从远程仓库(互联网)下载并保存到本地仓库中(在程序员的电脑上),当第二次使用时,不需要去远程仓库下载,会先去本地仓库中找,如果找不到才会去远程仓库上下载。
默认情况下,每个用户在自己的用户目录下都有一个路径名为 .m2/respository/ 的仓库目录。
本地仓库默认的路径
- linux:
~/.m2/repository
- windows:
c:\Users\Administrator\.m2\repository\
- 自定本地仓库:
~/.m2/setting.xml
<localRepository>d:\java\mvn_repo</localRepository>
3.2.2远程仓库
1.中央仓库
中央仓库中的jar包由专业团队(Maven团队)维护,中央仓库中存放了全世界大多数流行的开源软件的jar包,是Maven默认的远程仓库。http://mvnrepository.com/
2. 阿里云镜像仓库
作用:去除了访问中央仓库,而是访问镜像仓库,提高访问效率
配置方法如下:
~/.m2/setting.xml
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
3.3 profile文件
配置maven项目的默认的jdk版本,比如Maven项目采用JDK11
<profile>
<id>jdk-11</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>11</jdk>
</activation>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<maven.compiler.compilerVersion>11</maven.compiler.compilerVersion>
</properties>
</profile>
同时也可在文件pom.xml文件中修改
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
4. maven 的补充
4.1 主干结构和命令:
常用的命令
- mvn clean 清理target目录
- mvn compile
- mvn package
- mvn install
- mvn deploy 部署到远程仓库
- mvn test 失败不能打包
- mvn clean install
- mvn clean install -Dmavne.test.skip=true
忽略测试,直接部署
4.2 Maven中的坐标(gav)
Maven项目的坐标(gav坐标)在maven仓库定位构建使用groupId artifactId,version坐标来进行定位
<groupId>com.lxs.demo</groupId>
<artifactId>hello-maven</artifactId>
<version>1.0-SNAPSHOT</version>
对应关系如下:
4.3 maven中的pom文件
<?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>com.lxs.demo</groupId>
<artifactId>hello-maven</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
4.4 maven 的依赖(idea中实现)
在idea中创建如下依赖:maven-second 依赖 maven-first
1.创建空项目
2.配置下项目默认的JDK
3.创建maven-first
4.配置pom.xml文件
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
</dependencies>
5.编写一个程序HelloFirst.java
package com.lxs.demo;
public class HelloFirst {
public String sayHello() {
return "hello first";
}
}
6.创建测试类
按 ctrl + shift + T点击create new Test
7.编写HelloFirstTest.java文件
package com.lxs.demo;
import org.junit.Assert;
import org.junit.Test;
import static org.junit.Assert.*;
public class HelloFirstTest {
HelloFirst helloFirst = new HelloFirst();
@Test
public void sayHello() {
Assert.assertTrue("hello first".equals(helloFirst.sayHello()));
}
}
8.运行并部署到本地
运行Test
编译通过
并通过下面操作部署到本地
9.创建maven-second
与创建maven-first同样的操作
在pom.xml文件中添加如下代码
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.wzx.demo</groupId>
<artifactId>maven-first</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
10点击右上角刷新按钮后创建HelloSecond.java
package com.lxs.demo;
public class HelloSecond {
HelloFirst helloFirst = new HelloFirst();
public String sayHello() {
return helloFirst.sayHello() + ":second"; //hello first:second
}
}
11与创建HelloFirstTest.java同样的操作创建HelloSecondTest.java
package com.lxs.demo;
import org.junit.Assert;
import org.junit.Test;
import static org.junit.Assert.*;
public class HelloSecondTest {
HelloSecond helloSecond = new HelloSecond();
@Test
public void sayHello() {
Assert.assertTrue("hello first:second".equals(helloSecond.sayHello()));
}
}
12运行Test,通过即可成功完成。