七的博客

快速上手Maven(一)-基础入门

Maven

快速上手Maven(一)-基础入门

Maven 是一款为 Java 项目做管理构建、依赖管理的工具。可以说在最近十来年的 Java 项目里,基本上都会有 Maven 的身影。

学习跟了解 Maven 的基本用法以及概念,是在日常项目开发中非常重要的一个环节。 计划用几篇文章总结下我对 Maven 的一些理解以及实践心得。

大概会包括以下几个章节:

  • Maven 的基础入门。 包括Maven 是什么、为什么要用 Maven、HelloWorld 等。
  • Maven 的依赖管理。 非常核心的一部分内容,包括版本号维护,依赖传递等。
  • Maven 项目中构建相关。包括生命周期、阶段、常用的结构命令等。
  • 开发 Maven 项目中比较常用的一些插件介绍等。
  • Maven 项目多模块的实践。
  • Maven 私服仓库的应用。

章节适合哪些人群阅读:

  • 如果你只是需要简单的使用 Maven ,引入依赖等,直接看第一章节、第二章节即可。

  • 如果你需要部署项目等,可以额外看下第三章节。

  • 如果你需要自己搭建项目脚手架,那么可以额外看第四、五章节。

1. Maven 是什么

先看看官网对于 Maven 的介绍:

Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project’s build, reporting and documentation from a central piece of information.

Apache Maven 是一个软件项目管理和理解的工具。它基于项目对象模型(POM),可以从中心信息管理项目的构建、报告和文档。

Maven 是一个项目管理和构建自动化工具 ,主要用于 Java 语言的项目,但是也支持其他编程语言。但是一般情况下,只有 Java 语言的项目才会采用,因为其他语言一般都有自己的方案。

这个工具主要是由 Apache Software Foundation 维护,是一个开源的软件,同时由社区进行维护,大家都可以免费使用。

2. Maven 的使用场景

Maven 是使用场景简单的总结下主要有以下 2 个:

2.1 依赖管理

回忆下在没有使用 Maven 之前,项目里面要去引用第三方的依赖库的时候的一个流程,流程比较多,大概有以下几个流程:

  • 手动去网上搜索依赖的 JAR 包,有些可以直接搜索到,有些需要去特定网站上进行下载。
  • 下载好的 JAR 包不一定可以直接使用,有时候这个 Jar 包也会依赖其他的 Jar, 需要把依赖到的 JAR 文件都下载下来。
  • 将下载的一系列的 JAR 都添加到项目的类路径里面去 ( 即 classpath 中)。
  • 添加到项目中还需要注意依赖版本号冲突的问题。一个项目中会使用很多的第三方依赖,每个第三方依赖又会依赖其他的第三方库,而且需要的版本还不一样。 这个时候需要去解决这些版本冲突,合理地对依赖的 JAR 包版本进行升级以及降级。
  • 在项目的迭代过程中,第三方库也会进行更新,这样如果想升级项目里面的 JAR 版本时,就要重复上面的流程,手动去替换相关的 JAR 文件,然后解决版本冲突等问题。

如果使用了 Maven 的话,Maven 就可以自动下载复制这些依赖到项目里面。 同时也会自动下载依赖需要的依赖,这样可以大幅度提升开发效率。

2.2 项目构建

项目构建指的是将代码、相关的配置文件、资源文件等变成可以直接运行或者部署的应用程序或者依赖库的流程。比如要将一个 Java 项目打包成 JAR ,然后放到服务器上去运行。

在没有使用 Maven 之前,我们构建一个项目的流程如下:

  • 开发编写 Java 代码在 .java 文件中。

  • 手动调用 Java 编译器 javac 来编译代码,执行:

  javac -d bin src/*.java
  • 编译完成后,将编译好的 .class 文件以及第三方 JAR 包打包成一个压缩包, 常见的格式是 *.jar 或者 *.war。 打包的过程通常也会编写一些脚本来辅助完成,降低重复工作量。

  • 如果有单元测试的话,需要单独编译测试用例代码,然后进行测试。

  • 如果要生成 javadoc 文档的话,需要单独进行生成。

  • 如果需要清理构建出来的文件或者目录的话,也需要进行手动清理。

如果是使用了 Maven 的话,Maven 可以通过一套标准的流程,将这些工作给完成掉。 开发只需要输入几条简单的命令,就可以完成上述工作。

3. 快速安装

要使用 Maven , 首先需要安装和配置 Maven 环境。安装 Maven 前又需要有 Java 环境,因为 Maven 是用 Java 写的。确保你安装了 JDK,并设置了环境变量 JAVA_HOME

再去 Maven 官网 https://maven.apache.org/download.cgi 下载一个适合当前操作系统的版本。

3.1 Windows 上安装 Maven

  • 将下载的安装包解压到一个目录 , 比如 D:\maven\apache-maven-3.x.x。

  • 新建系统变量 MAVEN_HOME , 变量值为 Maven 的安装目录,如 D:\maven\apache-maven-3.x.x。像在 IDE 中会去查找这个变量名称,用来判断是否有安装 Maven。

  • 再编辑系统变量 Path , 添加 %MAVEN_HOME%\bin 。 配置这个环境变量可以让直接在命令行中执行 Maven 相关的命令。

  • 最后,在命令行中输入 mvn -version , 如果输出 Maven 的版本信息,则说明安装成功。

3.2 Linux 上安装 Maven

  • 将下载的 Maven 程序包进行解压,假设解压在 /opt/apache-maven 中。
  tar -xvzf apache-maven-x.y.z-bin.tar.gz
  • 编辑当前用户的配置环境变量
  vim ~/.bashrc
  • 添加内容
  export M2_HOME=/opt/apache-maven
  export PATH=$M2_HOME/bin:$PATH
  • 刷新下环境变量
  source ~/.bashrc
  • 最后,在命令行中输入 mvn -version , 如果输出 Maven 的版本信息,则说明安装成功。

4. 快速体验

学习任何一门技术 , 最好的方式就是动手实践。老样子,下面还是通过一个 Hello World 例子 , 来感受一下 Maven 项目的创建和构建过程。

注意: 这里还是使用命令行来创建,没有直接在 IDE 里面创建,主要是为了集中在学习 Maven 上。 同时下方的截图是在 IDEA 中进行截图,目的是为了通过 IDEA 的目录更好的展示一些层级结构信息。

4.1 初始化基础项目结构

  • 首先在指定目录下创建一个用来存放项目的文件夹,我这里新建一个 maven-example 文件夹。

  • 然后打开命令行, 执行以下命令 , 创建一个名为 hello-world 的 Maven 项目:

mvn archetype:generate -DgroupId=com.suny.maven-example -DartifactId=hello-world -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

这个命令会根据 maven-archetype-quickstart 这个原型创建一个最简单的 Maven 项目。 命令的具体内容可以先跳过。

  • 进入 hello-world 目录 , 可以看到 Maven 已经帮我们生成了一个标准的项目结构:

IDEA 中显示的 hello-world 工程结构

这个项目中,主要的组成结构如下:

  • pom.xml : 项目的配置文件 , 包括一些项目信息、依赖管理等。很核心的一个文件,

  • src/main : 项目的主代码目录。

  • src/test : 项目的测试代码目录。

点开 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>
    
    <!-- 这个标签指定了项目的组 ID,通常是公司或组织的域名倒写 -->
    <groupId>com.suny.mavenexample</groupId>
    <!-- 这个标签指定了项目的 artifact ID,通常是项目的名称 -->
    <artifactId>hello-world</artifactId>
    <!-- 这个标签指定了项目的版本,SNAPSHOT 表示这是一个开发中的版本 -->
    <version>1.0-SNAPSHOT</version>
    <!-- 这个标签指定了项目的打包类型,这里是 JAR 文件,也可以是其他选项 -->
    <packaging>jar</packaging>
   
    <name>hello-world</name>
    <url>http://maven.apache.org</url>
    
    <!-- 这个标签包含了项目的所有依赖项 -->
    <dependencies>  
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

上面内容中,可以稍微关注下有注释的这几个标签,平时用的比较多。

4.2 编写 Hello World 代码

src/main/java/com/suny/mavenexample/App.java 文件中 , 已经生成了一些示例代码 , 我们将其改为输出 “Hello World! Maven “:

package com.suny.mavenexample;

public class App 
{
    public static void main( String[] args )
    {
        System.out.println( "Hello World! Maven " );
    }
}

这里还需要对 pom.xml 进行调整下,告诉 JAR 包启动后,应该执行 main 方法在哪里。 往 pom.xml 中添加如下标签:

<project>
    ... 原有的内容
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.1.0</version>
                <configuration>
                    <archive>
                        <manifest>
                            <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                            <!-- 这个标签指定了 JAR 文件的入口,即包含 main 方法的主类。-->
                            <mainClass>com.suny.mavenexample.App</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

4.3 构建 Hello World

在项目根目录下,即 pom.xml 所在目录 执行以下面的命令来构建项目:

mvn clean package

解释下上面这条语句:

  • mvn 是 Maven 的程序名称,配置了系统环境变量之后,命令行中可以直接执行 mvn 这个程序。

  • clean 是一个参数,表示清理上一次构建生成的文件。

  • package 是一个参数,表示要打包项目 , 生成可执行的 jar 包。

构建成功后 , 会在 target 目录下生成一个 hello-world-1.0-SNAPSHOT.jar 文件。

mvn 编译后的程序文件路径

4.4 运行项目

使用以下命令运行项目 :

java -jar target/hello-world-1.0-SNAPSHOT.jar

可以看到控制台输出 :

HelloWorld输出

通过几个简单的步骤,已经成功创建、构建并运行了第一个 Maven 项目!

5. 参考链接