Maven 的安装和工程的初始化

246 阅读5分钟

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_HOMEMaven 目录
path%M2_HOME%\bin

开发第一个 Maven 项目

其实我们之前的实验为了方便下载第三方的 jar 文件,已经使用过了 Maven。这里我们就以命令行的方式,开发运行一个 Maven 项目。

一个 Maven 项目必须符合以下目录结构:

项目名
└─src
├─main
│  ├─java
│  └─resources
└─test
    └─java

其中,各个目录或文件的含义如下表所示。

目 录简 介
src存放源码
main存放主程序
java存放 Java 源文件
resources存放配置文件、属性文件等资源文件
test存放测试程序
pom.xmlMaven 项目的配置文件

可以发现,Maven 将主程序和测试程序分别放在了 main 和 test 目录中,以此来区分管理。

  1. 打开 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
interactiveModeMaven 是否需要和用户交互以获得输入
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 的其他地方通过 ${属性名} 的方式引用。 标签主要有以下几个作用:

  1. 定义项目版本号:通常会在中定义一个版本号属性,然后在中引用该属性,这样可以方便统一修改版本号。例如:
   <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>
  1. 定义常量:可以将一些常用的常量定义为属性,在需要的地方引用,避免硬编码。

  2. 定义 Maven 插件版本号:同样可以把插件版本号定义为属性。

  3. 指定编译参数:比如可以定义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() 方法作为入口开始运行程序,感兴趣的同学可以自行测试。