Maven快速上手

创建工程

在控制台中进入到项目目录,输入以下命令创建工程:

mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false

如果你刚刚安装Maven,则这个命令会需要消耗一些时间,因为Maven需要下载一些插件或者文件至你本地的资源库中。你可能需要运行这个命令几次才会成功,因为一些远程服务器会连接超时(这个问题有办法解决)。

命令执行成功后会创建一个与artifactId同名的目录,该目录结构为标准的Maven项目结构

my-app
│  pom.xml
│  
└─src
    ├─main
    │  └─java
    │      └─cn
    │          └─daiwuliang
    │                  App.java
    │                  
    └─test
        └─java
            └─cn
                └─daiwuliang
                        AppTest.java

src/main/java 包含了项目源代码
src/test/java 包含了测试源代码
pom.xml 是项目对象模型

POM(Project Object Model)

pom.xml是Maven项目配置的核心,它包含了构建项目所需的主要信息,POM很复杂,但是开发人员需要深入了解它。

<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">
  <modelVersion>4.0.0</modelVersion>
 
  <groupId>com.mycompany.app</groupId>
  <artifactId>my-app</artifactId>
  <version>1.0-SNAPSHOT</version>
 
  <properties>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
  </properties>
 
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

构建命令解析

上面执行的构建命令,含义是执行了Maven目标(goal) archetype:generate,之后的参数为传入目标的参数,前缀archetype是提供目标(goal)的插件,如果你熟悉Ant,你可以将目标理解为Ant的task, archetype:generate 目标(goal)在 maven-archetype-quickstart原型基础上的简单项目。总结来说,插件(plugin)就是一系列目的相近的目标(goal)的集合,例如jboss-maven-plugin,它的目标是多种jboss项目

构建工程

mvn package

控制台中最终会输出:

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  4.241 s
[INFO] Finished at: 2020-10-10T17:25:02+08:00
[INFO] ------------------------------------------------------------------------

这个命令与上一个(archetype:generate)有着明显的不同,这个命令不是运行目标(goal)而是阶段(phase),阶段(phase)是构建生命周期(build lifecycle)的一个步骤,阶段(phase)在生命周期中是有顺序的,当一个阶段(phase)被执行时,在它前面的所有阶段(phase)都会被执行,例如,如果我们执行compile阶段,实际执行的阶段(phase)有:

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

可以通过以下命令验证编译结果:

java -cp target/my-app-1.0-SNAPSHOT.jar cn.daiwuliang.App

会输出:

Hello World!

对Java 9+的支持

Maven默认使用旧版本编译插件 maven-compiler-plugin,该版本插件不兼容Java9或者更新的版本,如果项目使用使用Java9+,则应该使用3.6.0+的maven-compiler-plugin,并且设置 属性 maven.compiler.release 为目标Java版本

以下为配置的一个例子:

<properties>
        <maven.compiler.release>11</maven.compiler.release>
    </properties>
 
    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.8.1</version>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

运行Maven

Maven阶段(phase)
以下为通常的默认生命周期阶段:

  • validate: 校验工程是否包含了所有必要的信息
  • compile: 编译工程的源代码
  • test: 使用合适的单元测试框架测试编译后的源代码,这些测试不应该依赖打包或者发布的代码
  • package: 将编译后代码打包为发布格式,例如JAR
  • integration-test: 运行集成测试
  • verify: 运行检查项,以验证打包文件符合质量标准
  • install: 安装打包文件到本地资源库,可供本地其他项目依赖
  • deploy: 会在集成环境或者正式环境执行,将最终的打包文件发布至远程仓库,以供其他卡发着或者工程使用

在默认的阶段之外还有两个阶段:

  • clean: 清空之前构建内容
  • site: 生成工程的文档信息
    阶段(Phase)实际上是一些底层的目标(goal),阶段(phase)和目标(goal)可以按照书写顺序执行:
mvn clean dependency:copy-dependencies package

这个命令会清空工程,复制依赖,打包工程

生成站点

mvn site

这个站点的生成依赖于pom配置,生成后的文件位于target/site

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值