抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

摘要:本文学习了Maven的安装配置以及在项目中的简单使用。

环境

Windows 10 企业版 LTSC 21H2
Java 1.8
Maven 3.6.0

1 下载安装

1.1 准备工作

Maven的运行依赖JDK,需先安装JDK并配置环境变量,且Maven版本与JDK版本必须匹配,否则会报错。

打开命令行输入java -version命令和javac -version命令,确保两者版本一致且无报错,否则需先修复JDK配置。

1.2 下载安装

官方下载地址:https://maven.apache.org/download.cgi

下载和JDK匹配的压缩包,解压到本地软件安装目录。

1.3 环境变量

新建环境变量,变量名为MAVEN_HOME,变量值为解压目录。

找到Path环境变量,点击编辑,新建变量%MAVEN_HOME%\bin并保存,设置后可以在DOS中执行命令。

1.4 验证

打开cmd命令行,执行mvn -v命令:

cmd
1
2
3
4
5
Apache Maven 3.6.0 (97c98ec64a1fdfee7767ce5ffb20918da4f719f3; 2018-10-25T02:41:47+08:00)
Maven home: D:\Work\Maven\apache-maven-3.6.0\bin\..
Java version: 1.8.0_201, vendor: Oracle Corporation, runtime: D:\Work\Java\jdk1.8.0_201\jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"

如能正确显示安装的版本,则说明环境变量配置正确。

2 仓库

2.1 含义

仓库能够统一管理Jar包,在项目中通过坐标引入,不需要手动导入,整个项目只需要一个pom.xml文件就解决了Jar包的问题。

2.2 分类

仓库分为两类,本地仓库和远程仓库,远程仓库还可以细分为三种,按优先级排序:

  • 本地仓库:缓存从远程仓库下载的Jar包,供本地所有Maven项目使用。
  • 私服仓库:企业内部共享Jar包,避免外网依赖。比如企业运维搭建的Nexus仓库。
  • 中央仓库镜像:中央仓库的镜像仓库,目的是为了提高访问速度,遵循就近原则。比如阿里云镜像和华为云镜像。
  • 中央仓库官方:全球公共Jar包存储的仓库,速度比较慢。地址:https://repo.maven.apache.org/maven2/

2.3 配置

2.3.1 配置本地仓库

默认使用C:\Users\当前用户名\.m2\repository作为本地仓库的路径。

可以在settings.xml文件中修改本地仓库的路径:

settings.xml
1
<localRepository>D:\Work\MavenRepository</localRepository>

2.3.2 配置中央仓库镜像

官方中央仓库在国外,直接通过中央仓库下载Jar太慢,需替换为阿里云镜像,同样是修改settings.xml文件:

settings.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
<mirrors>
<!-- 阿里云中央仓库镜像 -->
<mirror>
<!-- 镜像ID:唯一编号 -->
<id>aliyunmaven</id>
<!-- 镜像目标:匹配中央仓库 -->
<mirrorOf>central</mirrorOf>
<!-- 镜像名称:简称 -->
<name>阿里云公共仓库</name>
<!-- 镜像地址:加速访问的仓库地址 -->
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
</mirrors>

3 简单使用

3.1 创建项目

创建demo项目目录,并在目录中创建pom.xml文件:

pom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">

<!-- 固定配置 -->
<modelVersion>4.0.0</modelVersion>

<!-- 项目坐标(使用GAV唯一标识项目) -->
<groupId>com.example</groupId> <!-- 组织/公司标识(公司域名反写) -->
<artifactId>demo</artifactId> <!-- 项目/模块名(如demo) -->
<version>0.0.1-SNAPSHOT</version> <!-- 版本(SNAPSHOT表示快照版,开发中使用) -->

<name>demo</name> <!-- 项目名称(可选,仅标识用) -->

<!-- 全局属性配置 -->
<properties>
<!-- 全局编码 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- 源码编译版本 -->
<maven.compiler.source>1.8</maven.compiler.source>
<!-- 生成字节码的目标版本 -->
<maven.compiler.target>1.8</maven.compiler.target>
</properties>

<!-- 项目依赖配置 -->
<dependencies>
<!-- 依赖单元测试Jar包 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<!-- 表示仅测试阶段生效 -->
<scope>test</scope>
</dependency>
</dependencies>

<!-- 插件配置 -->
<build>
<plugins>
<!-- 解决编码问题 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>${maven.compiler.source}</source>
<target>${maven.compiler.target}</target>
</configuration>
</plugin>
</plugins>
</build>

</project>

按照标准目录结构在项目目录中创建目录和文件:

code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
demo
├── src/ # 源码与资源目录
│ ├── main/ # 主程序目录(生产环境代码)
│ │ ├── java/ # 主程序Java源码(如com.example.demo)
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── demo/
│ │ │ └── Demo.java
│ │ └── resources/ # 主程序资源文件(如application.properties)
│ └── test/ # 测试程序目录(单元测试代码)
│ ├── java/ # 测试Java源码(如com.example.demo.Test)
│ │ └── com/
│ │ └── example/
│ │ └── demo/
│ │ └── DemoTest.java
│ └── resources/ # 测试资源文件(如test.application.properties)
└── pom.xml # Maven核心配置文件(项目元信息、依赖、构建规则等内容)

构建后的target输出目录会自动创建,不需要手动创建。

编写主程序代码:

Demo.java
1
2
3
4
5
6
7
8
9
10
11
12
13
package com.example.demo; // 必须与目录结构一致

public class Demo {
// 主方法(运行入口)
public static void main(String[] args) {
System.out.println("Hello Maven!");
}

// 测试用方法(供单元测试调用)
public String demoTest(String name) {
return "Hello " + name + "!";
}
}

编写测试程序代码:

DemoTest.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package com.example.demo;

import org.junit.Test; // 导入JUnit测试注解
import static org.junit.Assert.assertEquals; // 导入断言方法

public class DemoTest {
// 单元测试方法(@Test注解标识)
@Test
public void test() {
HelloWorld demo = new Demo();
String result = demo.demoTest("Maven");
// 断言:验证结果是否符合预期(失败会导致测试不通过)
assertEquals("Hello Maven!", result);
}
}

3.2 执行命令

打开cmd命令行,进入项目目录执行命令。

3.2.1 清理

使用mvn clean命令清理项目,出现BUILD SUCCESS即表示清理成功。

清理命令会删除target目录。

3.2.2 编译

使用mvn compile命令编译项目,出现BUILD SUCCESS即表示编译成功。

清理命令会:

  • 编译src/main/java下的主程序源码,生成字节码文件放到target/classes目录。
  • 复制src/main/resources下的资源文件,放到target/classes目录。

3.2.3 测试

使用mvn test命令测试项目,出现BUILD SUCCESS即表示测试成功。

测试命令会:

  • 预先执行mvn compile命令编译项目,确保主程序已编译。
  • 编译src/test/java下的测试源码,生成字节码文件放到target/test-classes目录。
  • 执行所有带@Test注解的测试方法,生成测试报告。

3.2.4 打包

使用mvn package命令打包项目,出现BUILD SUCCESS即表示打包成功。

打包命令会:

  • 预先执行mvn compile test命令,确保测试通过。
  • 将主程序目录src/main下的文件打包为压缩产物,放在target目录。

默认压缩格式为Jar包,如果需要War包,需要在pom.xml文件中添加:

pom.xml
1
<packaging>war</packaging>

如果打包生成的是War包,还需要配置Web项目结构,处理Web资源文件。

3.2.5 部署

使用mvn install命令部署项目,出现BUILD SUCCESS即表示部署成功。

部署命令会:

  • 预先执行mvn compile test package命令,确保已经生成打包文件。
  • 复制target目录下的打包产物,放在本地仓库,目录结构遵循GAV坐标。

部署成功后会在命令行打印打包产物在仓库的位置。

3.2.6 发布

使用mvn deploy命令发布项目,出现BUILD SUCCESS即表示发布成功。

发布命令会:

  • 预先执行mvn compile test package install命令,确保已经在本地仓库部署。
  • 复制本地仓库的打包产物,推送到远程仓库,目录结构遵循GAV坐标。

发布需要在pom.xml文件中配置远程仓库。

3.3 配置JDK版本

全局配置JDK版本,所有项目生效,修改settings.xml文件:

settings.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<profiles>
<!-- JDK 8全局配置 -->
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault> <!-- 默认激活此配置 -->
<jdk>1.8</jdk> <!-- 当JDK版本为1.8时激活 -->
</activation>
<properties>
<!-- 编译源码的JDK版本 -->
<maven.compiler.source>1.8</maven.compiler.source>
<!-- 生成字节码的目标JDK版本 -->
<maven.compiler.target>1.8</maven.compiler.target>
<!-- 编译器版本 -->
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
</profiles>

评论