5分钟了解Maven(部分翻译)
原文链接: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入门指南。