Maven就是是专门为Java项目打造的管理和构建工具,它的主要功能有:
- 提供了一套标准化的项目结构;
- 提供了一套标准化的构建流程(编译,测试,打包,发布……);
- 提供了一套依赖管理机制。
本节重点向大家介绍了 Maven 的作用,以及基本的使用方式。但 Maven 的功能远不仅如此,例如可以使用 Maven 和 Eclipse 等 IDE 整合进行 Web 开发、将一个项目拆分成多个模块、搭建基于父子工程的软件项目等,大家可以根据自己的需求进行更深一步的研究。
参考文档:
[Maven详解] www.cnblogs.com/chencijian/…
在 Linux 系统下安装 Maven 很简单,直接运行以下命令即可:
sudo apt install maven
在蓝桥云课的实验环境中,Maven 已经提前安装好了,大家直接运行即可。
提示:如果是在本机使用,大家就需要在使用 Maven 前配置好 JAVA_HOME 环境变量,以及配置以下的 Maven 环境变量,如下表所示。
变 量 名 变 量 值 M2_HOME Maven 目录 path %M2_HOME%\bin
开发第一个 Maven 项目
其实我们之前的实验为了方便下载第三方的 jar 文件,已经使用过了 Maven。这里我们就以命令行的方式,开发运行一个 Maven 项目。
一个 Maven 项目必须符合以下目录结构:
项目名
└─src
├─main
│ ├─java
│ └─resources
└─test
└─java
其中,各个目录或文件的含义如下表所示。
目 录 | 简 介 |
---|---|
src | 存放源码 |
main | 存放主程序 |
java | 存放 Java 源文件 |
resources | 存放配置文件、属性文件等资源文件 |
test | 存放测试程序 |
pom.xml | Maven 项目的配置文件 |
可以发现,Maven 将主程序和测试程序分别放在了 main 和 test 目录中,以此来区分管理。
- 打开 Xfce,输入以下命令,新建一个 Maven 项目
mavenDemo
:
mvn archetype:generate -DgroupId=org.lanqiao.maven -DartifactId=mavenDemo -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false -Dversion=0.0.1-SNAPSHOT
元 素 | 简 介 |
---|---|
groupId | 域名的翻转+项目名,如 org.lanqiao.maven |
artifactId | 项目的模块名,如 mavenDemo |
interactiveMode | Maven 是否需要和用户交互以获得输入 |
version | 版本号,如 0.0.1-SNAPSHOT |
在 src/main/java/org.lanqiao.maven
目录下,新建 HelloWorld.java
文件,如下:
package org.lanqiao.maven;
public class HelloWorld {
public String sayHello(String name){
return "Hello"+name ;
}
}
在 src/test/java/org.lanqiao.maven
目录下,新建 HelloWorldTest.java
文件,如下:
package org.lanqiao.maven;
import static org.junit.Assert.*;
import org.junit.Test;
public class HelloWorldTest {
@Test
public void testHelloWorld()
{
HelloWorld hello = new HelloWorld();
String content = hello.sayHello("张三");
assertEquals("Hello 张三",content);
}
}
在项目根目录下,查看并修改 Maven 配置文件 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>
<groupId>org.lanqiao.maven</groupId>
<artifactId>mavenDemo</artifactId>
<packaging>jar</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>mavenDemo</name>
<url>http://maven.apache.org</url>
<!-- 指定JDK编译版本 -->
<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>
<!-- 版本号改为 4.13 -->
<version>4.13</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
pom.xml
是 Maven 项目的配置文件。在 Maven 的 pom.xml
文件中,元素用于声明项目的所有依赖。元素可以包含多个子元素,每个 声明一个依赖,主要包含以下子元素:
子 元 素 | 简 介 |
---|---|
groupId | 域名的翻转+项目名,如 org.lanqiao.maven |
artifactId | 项目的模块名,如 MyFirstMavenProject |
version | 版本号,如 0.0.1-SNAPSHOT |
scope | 依赖的作用范围,比如 compile、test 、provider 等,默认为 compile |
optional | 标记依赖是否可选 |
exclusions | 用来排除传递性依赖 |
例如本例表示:当前项目依赖于 junit4.13,该依赖仅在测试时有效。
Maven 默认的 JDK 编译版本是1.5。这是因为早期 Java 的主流版本还停留在 1.5 的时候,Maven 作为构建工具,默认的编译兼容版本就是 1.5。如果不做任何配置,Maven 会使用 1.5 作为编译 JDK 版本。但实际开发中,我们通常会指定一个更高的 JDK 版本进行编译,比如上述示例中通过在 元素中指定 JDK 编译版本为 1.8。
Maven中的标签用于定义项目构建过程中使用的一些属性。在 properties 中定义的属性可以在 pom.xml 的其他地方通过 ${属性名}
的方式引用。 标签主要有以下几个作用:
- 定义项目版本号:通常会在中定义一个版本号属性,然后在中引用该属性,这样可以方便统一修改版本号。例如:
<properties>
<!-- 版本号改为 4.13 -->
<junit.test.version>4.13</junit.test.version>
</properties>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.test.version}</version>
<scope>test</scope>
</dependency>
-
定义常量:可以将一些常用的常量定义为属性,在需要的地方引用,避免硬编码。
-
定义 Maven 插件版本号:同样可以把插件版本号定义为属性。
-
指定编译参数:比如可以定义jdk编译版本
所以,properties 标签通过属性的方式帮助我们减少重复,方便统一管理。但不建议把所有信息都定义为属性,应该是有明确意义、被多处引用的信息才适合放到 properties 中。
编译 Maven 项目。在正式运行 Maven 项目前,先学习一下 Maven 的基本命令,如下表所示。
命 令 | 简 介 |
---|---|
mvn compile | 编译 Java 程序 |
mvn test-compile | 编译测试程序 |
mvn test | 执行测试程序 |
mvn package | 打包 |
mvn clean | 删除由 mvn compile 或 mvn test-compile 创建的 target 目录 |
打开 Xfce,进入 Maven 根目录,然后执行编译命令 mvn compile:
cd mavenDemo
mvn compile
运行结果如下图所示:
可以发现,执行编译命令时,Maven 会自动进行一些 Downloading 操作。这是因为当 Maven 命令需要使用某些插件时,Maven 会先到“本地仓库”中查找,如果找不到就会自动从互联网中下载。因此,编译命令执行完毕后,就可以在“本地仓库”中观察到已经下载好的插件,如下图所示。
mvn compile 执行完毕后,就会将项目中主程序的 Java 文件编译成 class 文件,并自动放入 target 目录中(target 目录会在执行 mvn compile 命令时自动创建),如下图所示。
同样的,运行以下命令:
mvn test-compile
mvn test-compile 命令也可以将测试程序的 Java 文件编译成 class 文件,并自动放入 target 目录中,如下图所示。
运行 Maven 项目:
mvn test
mvn test 命令可以执行 Maven 项目中的测试程序(如 HelloWorldTest.java 中的 testHelloWorld()方法),下图表示通过测试程序。
运行以下命令打包 Maven 项目:
mvn package
打包成功后如下图所示:
如果运行此 jar 包的话,将会从项目中的 main()
方法作为入口开始运行程序,感兴趣的同学可以自行测试。