五分钟上手maven

时间:2021-12-31 05:44:57

五分钟上手

创建项目

项目文件夹名为 artifactId参数指定的值

# 非交互模式创建
mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
# 交互模式创建
mvn archetype:generate

结构说明

初始目录如下:

my-app
|-- pom.xml
`-- src
    |-- main
    |   `-- java
    |       `-- com
    |           `-- mycompany
    |               `-- app
    |                   `-- App.java
    `-- test
        `-- java
            `-- com
                `-- mycompany
                    `-- app
                        `-- AppTest.java

src/main/java 存放项目源代码

src/test/java 存放测试代码

pom.xml 就是 POM(项目对象模型)文件。pom.xml文件是项目配置的核心。它是一个单独的文件,包含了大多数项目编译需要的配置。POM文件可能会变得很大且复杂,可能让我们望而生畏,但我们没有必要去理解所有的声明。


我们做了啥

我们执行了Maven的一个插件目标【archetype:generate】目标生成,并且传递了一些参数给这个目标。前缀 archetype 是一个插件,这个插件包含了一个目标叫 generate。如果你对 Ant 熟悉的话,你可能把它联想到 task。这个目标创建了一个基于 archetype的简单项目。简单来说,plugin(插件)就是一系列 goal(目标)的集合。


构建项目

mvn package

不同于第一个命令(archetype:generate) ,我们用了package。package 不是一个goal(目标), 而是一个phase(阶段)。一个phase(阶段) 就是构建生命周期中的一步。构建生命周期由有序的phase(阶段)构成。当给定了一个phase(阶段), Maven 会依次从第一个阶段走到指定的这个阶段。举个栗子,如果我要执行了 compile 阶段, 那将会一次执行以下阶段

  1. validate
  2. generate-sources
  3. process-sources
  4. generate-resources
  5. process-resources
  6. complie

你可以通过以下命令调用刚编译打包出来的Jar包

java -cp target/my-app-1.0-SNAPSHOT.jar com.mycompany.app.App

# 输出
# Hello World!

使用Maven工具

Maven Phases

虽然下面不是一个完整阶段列表,但这些都是比较常用默认的阶段

  • validate: 检查项目是否正确,并且所有必要的信息是否有效
  • compile: 编译项目源代码
  • test: 用适当的单元测试框架,测试已经编译好的代码。这些测试不应该要求代码已经被打包或者发布
  • package: 把编译后的代码打包成指定的格式,如 jar, war
  • integration-test: 运行集成测试,如果package需要被处理和发布到指定环境,需要做对应处理
  • verify: 运行所有测试,沿着package是否有用且达到质量要求
  • install: 安装package 到本地仓库,作为一个依赖提供给其他项目使用
  • deploy: 在集成或发布环境中完成,发布最终的产物到远程仓库。

除了上面提到的默认的列表,这里还有两个Phase需要注意

  • clean: 清理在之前构建流程中的产物
  • site: 为这个项目生成网页文档

Phases(阶段)实际上被映射成潜在的goals(目标),每一个阶段的目标取决于项目的打包类型。举个栗子,打包成 jar的话, 实际上执行了 mvn jar:jar, 而war则是mvn war:war

一个有趣的事情是,phases跟goals 会依次执行,如下命令

mvn clean dependency:copy-dependencies package

生成网站

mvn site

这个阶段会生成一个基于项目pom的网页。你可以再target/site 目录中看到这个文档