红茶的个人站点

  • 首页
  • 专栏
  • 开发工具
  • 其它
  • 隐私政策
Awalon
Talk is cheap,show me the code.
  1. 首页
  2. 开发工具
  3. 正文

Maven 简易指南

2023年8月31日 1014点热度 0人点赞 0条评论

1.基本概念

1.1.Maven 是什么

Maven 是一个项目管理工具,将项目的开发和管理过程抽象为一个项目对象模型(POM Project Object Model)。

image-20230819173142336

1.2.下载与安装

可以从 Maven 官网选择对应的平台和版本的 Maven 进行下载。

Maven 运行会使用两个环境变量:

  • JAVA_HOME,jdk 根目录

  • MAVEN_HOME,Maven 根目录

如果没有配置,需要在操作系统中添加。

Maven 本体用 Java 编写,由MAVEN_HOME/lib目录下的 jar 包构成,Windows 版本的 Maven 启动文件是 MAVEN_HOME/bin目录下的 mvn 或 mvn.bat。

为了方便在任何路径下都能运行 mvn 命令,需要将该目录加入环境变量Path。

可以在环境变量中使用已有环境变量,比如使用%MAVEN_HOME%/bin而非具体路径。

安装好后可以用以下命令测试:

❯ mvn --version
Apache Maven 3.8.6 (84538c9988a25aec085021c365c560670ad80f63)
Maven home: D:\software\coding\apache-maven-3.8.6
Java version: 1.8.0_332, vendor: Temurin, runtime: D:\software\coding\eclipse_jdk1.8\jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"

1.3.仓库

用 Maven 创建的 Java 程序通常都会依赖其他的 jar 包,这些 jar 包保存在 Maven 的中央仓库(Central)。

除了直接从中央仓库拉取 jar 包以外,如果是多人协同开发,也可以架设私有仓库,以便缓存一些大家都会使用的 jar 包,这样可以提高下载速度。

image-20230819174900553

1.3.1.镜像加速

Maven 的中央仓库访问速度慢,国内访问不友好,可以使用国内的一些镜像仓库进行加速。

方式是修改MAVEN_HOME/conf/settings.xml配置文件,在其中添加:

<mirror>
    <id>huaweicloud</id>
    <mirrorOf>*</mirrorOf>
    <url>https://repo.huaweicloud.com/repository/maven/</url>
</mirror>

这里是华为云提供的镜像服务。

类似的,还有阿里云的镜像服务:

<mirror>
    <id>aliyunmaven</id>
    <name>阿里云公共仓库</name>
    <url>https://maven.aliyun.com/repository/public</url>
    <mirrorOf>*</mirrorOf>
</mirror>
  • 这里的mirrorOf指定为什么样仓库使用镜像,一般填central表示中央仓库,*表示所有仓库。

  • 实际使用中发现很多时候虽然配置了阿里云镜像仓库,但实际上依然会使用中央仓库下载,速度很慢。可以通过在 Maven 项目中添加以下仓库信息来解决这个问题:

    <repositories>
        <repository>
            <id>central</id>
            <url>https://maven.aliyun.com/repository/central</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
    </repositories>

实际使用中我发现国内的镜像仓库保存的依赖似乎不完整,尤其是对较老版本的依赖或者最新的依赖。所以有时候依然需要我们从中央仓库下载:

<mirror>
    <id>central</id>
    <url>https://repo1.maven.org/maven2/</url>
    <mirrorOf>central</mirrorOf>
</mirror>

1.3.2.本地仓库

Windows 下默认的本地仓库目录是USER_HOME\.m2,比如我本机上就是C:\Users\icexmoon\.m2。

可以在本地仓库根目录添加一个settings.xml作为个人 Maven 配置,会覆盖前边提到的全局配置。

因为会占用 C 盘空间,所以我们最好将其修改为其它目录。这同样需要我们修改配置文件:

<localRepository>D:\software\maven\repo</localRepository>

除了修改配置文件指定其它目录以外,也可以使用软链接,将默认的C盘本地仓库目录指向一个其它盘符下的目录。

1.3.3.坐标

如何从一个 Maven 仓库中指定我们需要的 jar 包?

仓库中的 Jar 包用坐标进行定位和区分。可以通过 MVNRepository 这个网站检索我们需要的 Jar 包对应的坐标。

比如查找 JUnit 并选择 4.13.2 这个版本,可以找到类似下面的坐标信息:

<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.13.2</version>
    <scope>test</scope>
</dependency>

其中的节点意义为:

  • groupId,组织(公司)标识,一般使用组织拥有的域名反写,比如 cn.icexmoon。

  • artifactId,项目标识

  • version,版本号

这些节点共同唯一定义一个 jar 包在仓库中的坐标。

2.第一个 Maven 项目

下载示例项目java01。

2.1.pom.xml

Maven 项目的根目录下都有一个pom.xml文件,这是项目的说明文件。

在我们这个示例项目中:

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <!-- POM 模型版本 -->
    <modelVersion>4.0.0</modelVersion>
​
    <!-- 组织标识 -->
    <groupId>com.itheima</groupId>
    <!-- 项目标识 -->
    <artifactId>java01</artifactId>
    <!-- 版本 -->
    <version>1.0-SNAPSHOT</version>
​
    <!-- 引入的依赖 -->
    <dependencies>
        <!-- Junit 依赖(坐标)-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>
</project>

2.2.目录结构

Maven 项目都有统一的目录结构,比如这个示例项目:

├─src
│  ├─main
│  │  ├─java
│  │  │  └─com
│  │  │      └─itheima
│  │  └─resources
│  └─test
│      ├─java
│      │  └─com
│      │      └─itheima
│      └─resources
└─target

主要有三个目录:

  • /src/main,项目代码和静态资源

  • /src/test,测试代码和静态资源

  • /target,编译后的字节码和 jar 包

2.3.Maven 命令

Maven 可以在一系列插件的帮助下帮我们编译、测试、打包项目。

2.3.1.编译项目

在项目根目录下执行命令mvn compile即可以编译 Maven 项目。

Maven 会先检查本地仓库中是否有所需的插件,如果没有,会从远程仓库下载。比如类似的输出信息:

[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ java01 ---

最后出现如下信息表示编译成功:

[INFO] Compiling 1 source file to D:\workspace\java01\target\classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  01:10 min
[INFO] Finished at: 2023-08-19T18:34:34+08:00

此时项目下会出现/target目录,其中的classes目录中保存编译后的字节码。

2.3.2.清理

命令mvn clean可以清理项目编译产生的内容:

❯ mvn clean
...
[INFO] Deleting D:\workspace\java01\target
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  7.901 s
[INFO] Finished at: 2023-08-19T18:43:15+08:00
[INFO] ------------------------------------------------------------------------

2.3.3.测试

示例项目中包含一个测试用例:

package com.itheima;

import org.junit.Assert;
import org.junit.Test;

public class DemoTest {
    @Test
    public void testSay(){
        Demo d = new Demo();
        String ret = d.say("itheima");
        Assert.assertEquals("hello itheima",ret);
    }
}

可以用命令mvn test执行项目中的测试用例:

❯ mvn test
...
-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.itheima.DemoTest
hello itheima
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.087 sec

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

输出中包含测试用例执行的结果。此外,在/target/surefire-reports目录中会生成测试报告。

2.3.4.打包

mvn package命令可以对项目进行打包,打包后生成的 jar 包在/target目录下。

默认情况下打包会包含编译和测试环节。

2.4.用插件创建工程

手动创建工程麻烦且容易出错,可以用 Maven 插件创建工程目录结构和 pom.xml 文件:

mvn archetype:generate
-DgroupId={project-packaging} 
-DartifactId={project-name} 
-DarchetypeArtifactId=maven-archetype-quickstart
-DinteractiveMode=false

2.4.1.创建 Java 工程

mvn archetype:generate ^
-DgroupId=com.itheima ^
-DartifactId=java-project ^
-DarchetypeArtifactId=maven-archetype-quickstart ^
-Dversion=0.0.1-snapshot ^
-DinteractiveMode=false
  • 以上命令适用于CMD,CMD下使用^实现命令换行,Linux 下使用\。

  • 第一次运行需要下载插件,比较花费时间。

创建好的目录如下:

D:.
│  pom.xml
│
└─src
    ├─main
    │  └─java
    │      └─com
    │          └─itheima
    │                  App.java
    │
    └─test
        └─java
            └─com
                └─itheima
                        AppTest.java

自动生成的 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>com.itheima</groupId>
  <artifactId>java-project</artifactId>
  <packaging>jar</packaging>
  <version>0.0.1-snapshot</version>
  <name>java-project</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>

创建好的项目自动添加了一个 Junit 的依赖,并添加了一个入口类和相应的测试用例。

2.4.2.创建 Web 工程

mvn archetype:generate ^
-DgroupId=com.itheima ^
-DartifactId=web-project ^
-DarchetypeArtifactId=maven-archetype-webapp ^
-Dversion=0.0.1-snapshot ^
-DinteractiveMode=false

2.5.用 Idea 创建工程

如何用 Idea 创建 Maven 工程可以观看这个视频。

参考资料

  • 黑马程序员Maven全套教程

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: maven
最后更新:2023年9月2日

魔芋红茶

加一点PHP,加一点Go,加一点Python......

点赞
< 上一篇
下一篇 >

文章评论

取消回复

*

code

COPYRIGHT © 2021 icexmoon.cn. ALL RIGHTS RESERVED.
本网站由提供CDN加速/云存储服务

Theme Kratos Made By Seaton Jiang

宁ICP备2021001508号

宁公网安备64040202000141号