📜  Maven 生命周期和基本 Maven 命令(1)

📅  最后修改于: 2023-12-03 14:44:13.404000             🧑  作者: Mango

Maven 生命周期和基本 Maven 命令

Maven 是一个开源的构建工具,它可以用于构建和管理 Java 项目。Maven 采用了生命周期的概念来管理项目的构建和发布过程,同时提供了一些常用的命令来简化构建流程。本文将介绍 Maven 生命周期的概念和基本 Maven 命令的使用方法。

Maven 生命周期

Maven 生命周期是由一系列阶段(Phase)组成的,每个阶段都代表了构建过程中的一个步骤。Maven 将所有阶段划分为三个基本生命周期:

  • clean 生命周期:负责清理构建过程中生成的文件。
  • default 生命周期:构建过程的主要生命周期,负责编译、测试、打包、部署等。
  • site 生命周期:负责生成项目站点的文档等。

每个生命周期由多个阶段组成,不同的生命周期之间相互独立。默认情况下,Maven 只会执行指定生命周期中的 default 生命周期和其中的若干阶段。如果需要执行其他生命周期或阶段,可以使用命令行参数进行指定。

Maven 生命周期阶段

下面是 Maven 生命周期中常用的一些阶段:

  • clean 生命周期
    • pre-clean:执行 clean 命令之前调用。
    • clean:移除构建目录中的所有文件。
    • post-clean:执行 clean 命令之后调用。
  • default 生命周期
    • validate:校验项目是否正确并且所有必须的信息可用。
    • compile:编译源代码。
    • test:运行测试代码。
    • package:打包项目,生成 jar、war 等文件。
    • install:将打包好的文件安装到本地仓库中,供其他项目使用。
    • deploy:将打包好的文件部署到远程仓库中,供其他用户使用。
  • site 生命周期
    • pre-site:执行 site 命令之前调用。
    • site:生成项目站点,包括文档、报告等。
    • post-site:执行 site 命令之后调用。
    • site-deploy:将生成的站点部署到远程站点。
Maven 生命周期绑定

为了让 Maven 正确执行生命周期的阶段,需要将插件和目标与生命周期的阶段进行绑定。插件和目标通过配置 pom.xml 文件进行绑定,可以指定某个阶段执行的插件和目标,也可以指定某个插件的目标绑定到某个阶段上面。

下面是一个将 Maven Dependency 插件的 copy-dependencies 目标绑定到 package 阶段的示例:

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-dependency-plugin</artifactId>
      <version>3.2.0</version>
      <executions>
        <execution>
          <id>copy-dependencies</id>
          <phase>package</phase>
          <goals>
            <goal>copy-dependencies</goal>
          </goals>
          <configuration>
            <outputDirectory>${project.build.directory}/lib</outputDirectory>
          </configuration>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

该配置将 Maven Dependency 插件的 copy-dependencies 目标绑定到 package 阶段, 执行 mvn package 命令时会自动执行 copy-dependencies 目标。

Maven 命令

Maven 命令是用于执行 Maven 生命周期阶段的工具。Maven 提供了一些常用的命令,可以在命令行下运行,也可以在 IDE 中使用 Maven 插件来执行。

mvn clean

清理项目,删除构建目录下的文件。可选的参数包括:

  • -n, --non-recursive:不对子模块进行清理。
mvn validate

验证项目的合法性和正确性。可选的参数包括:

  • -N, --non-recursive:只对当前项目进行验证,不对子模块进行验证。
  • -DskipTests:跳过测试,只执行验证。
mvn compile

编译项目,生成编译后的 class 文件。可选的参数包括:

  • -DskipTests:跳过测试,只执行编译。
  • -pl, --projects:指定要编译的模块,多个模块使用逗号分隔。
mvn test

运行测试用例。可选的参数包括:

  • -Dtest:指定要运行的测试类或测试方法,例如 -Dtest=com.example.FooTest#testBar
  • -DskipTests:跳过测试。
  • -pl, --projects:只对指定的模块执行测试。
mvn package

打包项目,生成 jar、war 等文件。可选的参数包括:

  • -DskipTests:跳过测试,只打包。
  • -pl, --projects:只对指定的模块打包。
mvn install

将打包好的文件安装到本地仓库中,供其他项目使用。可选的参数包括:

  • -DskipTests:跳过测试,只安装。
  • -pl, --projects:只对指定的模块进行安装。
mvn deploy

将打包好的文件部署到远程仓库中,供其他用户使用。可选的参数包括:

  • -DskipTests:跳过测试,只部署。
  • -pl, --projects:只对指定的模块进行部署。
mvn site-deploy

将生成的站点部署到远程站点。可选的参数包括:

  • -DskipTests:跳过测试,只部署站点。
  • -pl, --projects:只对指定的模块生成和部署站点。
总结

Maven 生命周期提供了一种管理项目构建和发布过程的方法,可以让用户更方便地构建和部署项目。Maven 命令是 Maven 的核心工具,对执行 Maven 生命周期中的阶段非常有用。本文介绍了常用的 Maven 生命周期阶段和 Maven 命令,希望可以帮助读者更好地使用 Maven 工具。