摘要:本文学习了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命令:
cmd1 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.xml1
| <localRepository>D:\Work\MavenRepository</localRepository>
|
2.3.2 配置中央仓库镜像
官方中央仓库在国外,直接通过中央仓库下载Jar太慢,需替换为阿里云镜像,同样是修改settings.xml文件:
settings.xml1 2 3 4 5 6 7 8 9 10 11 12 13
| <mirrors> <mirror> <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.xml1 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>
<groupId>com.example</groupId> <artifactId>demo</artifactId> <version>0.0.1-SNAPSHOT</version>
<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> <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>
|
按照标准目录结构在项目目录中创建目录和文件:
code1 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.java1 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.java1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| package com.example.demo;
import org.junit.Test; import static org.junit.Assert.assertEquals;
public class DemoTest { @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.xml1
| <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.xml1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| <profiles> <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> </profiles>
|
条