首页 > 技术文章 > 5分钟了解Maven(部分翻译)

xkxf 2022-01-25 21:31 原文

原文链接:https://maven.apache.org/guides/getting-started/maven-in-five-minutes.html

安装

创建一个项目

我采用和原文不同的办法,我通过https://start.spring.io/创建了一个基础项目,解压后,命令行转到有pom.xml的目录下。删除多余的文件,例如mvnw等。项目结构如下:

 src/main/java目录包含项目源代码,src/test/java目录包含测试源代码,而POM.xml文件是项目的项目对象模型(project Object Model,简称POM)。

项目对象模型(the POM)

pom.xml文件是Maven中项目配置的核心。它是一个单独的配置文件,包含以您想要的方式构建项目所需的大部分信息。POM非常庞大,其复杂性可能令人生畏,但要有效地使用它,并不需要理解所有的复杂性。本项目的POM为:

<?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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.3</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

构建项目(Build the Project)

mvn package

命令行将打印出各种操作,并以以下命令结束:

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  23.963 s
[INFO] Finished at: 2022-01-25T17:55:32+08:00
[INFO] ------------------------------------------------------------------------

与执行的第一个命令(archetype:generate)不同,第二个命令只是一个单词——package。这不是一个目标(goal),而是一个阶段(phase)。阶段是构建生命周期(build lifecycle)中的一个步骤,它是阶段的有序序列。当给定一个阶段时,Maven将执行序列中的每个阶段,直到并包括所定义的阶段。例如,如果你执行编译(compile)阶段,实际执行的阶段是:①validate;②generate-sources;③process-sources;④generate-resources;⑤process-resources;⑥compile

你可以用下面的命令测试新编译和打包的JAR:

java -jar target/demo-0.0.1-SNAPSHOT.jar

运行Maven工具

Maven阶段(Maven Phases)

虽然这不是一个全面的列表,但这些是最常见的默认(default)执行的生命周期阶段。

  • 验证(validate):验证项目是正确的,所有必要的信息都是可用的
  • compile:编译项目的源代码(PS. 当我们编译项目时,我们将看到Maven为我们下载相关依赖项)
  • 测试(test):使用合适的单元测试框架测试编译后的源代码。这些测试不应该要求打包或部署代码
  • package:将编译后的代码以其可分发的格式打包,比如JAR。
  • 集成测试(integration-test):在必要时将包处理并部署到可以运行集成测试的环境中
  • 验证(verify):运行任何检查,以验证包是有效的,并满足质量标准
  • 安装(install):将包安装到本地存储库中,作为本地其他项目的依赖项使用
  • 部署(deploy):在集成或发布环境中完成,将最终的包复制到远程存储库,以便与其他开发人员和项目共享。

除了上面的默认列表之外,还有另外两个Maven生命周期需要注意。他们是

  • 清理(clean):清理之前构建(builds)创建的构件(artifacts)
  • Site:为该项目生成站点文档

阶段(phases)实际上映射到潜在的目标(goals)。每个阶段执行的具体目标取决于项目的打包类型(packaging type)。例如,如果项目类型是JAR,则package执行jar:jar,如果项目类型是-你猜对了- WAR,则执行war:war

值得注意的一件有趣的事情是,阶段(phases )和目标(goals )可以按顺序执行。

mvn clean dependency:copy-dependencies package

这个命令将清除项目,复制依赖项,并打包项目(当然,执行到打包的所有阶段)。

生成网站(Generating the Site)

mvn site

此阶段基于项目POM的信息生成一个站点。您可以查看target/site下生成的文档。

结论

我们希望这篇简短的概述已经激起了您对Maven的多功能性的兴趣。请注意,这是一个删节了的快速入门指南。现在,您已经准备好了解关于刚才执行的操作的更全面的细节了。查看Maven入门指南

推荐阅读