Spring Boot「03」使用 Maven 管理并构建项目

362 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第03天,点击查看活动详情

今天我们来学习下如何用 Maven 来管理并构建 Spring Boot 项目。我们继续使用之前的 payroll 工程。

01-使用 Maven 构建多模块项目

接下来,我们将为 payroll 项目增加两个子模块,library 和 examples。主要步骤如下:

  1. 在 payroll/pom.xml 中增加如下内容:

    <modules>
      <module>library</module>
      <module>examples</module>
    </modules>
    
  2. 与 payroll/pom.xml 同级新建两个目录,library 和 examples,它们的目录结构与 payroll 类似:

    └── library
        └── src
            └── main/java
            └── test/java
        └── pom.xml
    └── examples
        └── src
            └── main/java
            └── test/java
        └── pom.xml
    └── pom.xml
    
  3. payroll/library/pom.xml 中增加如下内容:

    <parent>
      <artifactId>payroll</artifactId>
      <groupId>self.samson.example</groupId>
      <version>0.0.1-SNAPSHOT</version>
    </parent>
    
  4. 构建多模块项目。

    Maven 中处理多模块项目的机制也被称作 reactor,它的功能包括:

    • 收集所有需要构建的模块
    • 对模块进行排序,得到一个恰当到的构建顺序
    • 按照顺序构建模块

    所以,当对一个多模块项目执行mvn install的时候,会按照 reactor 的工作模式进行构建。 如果只需要构建某个模块,可以通过mvn install -pl module1,module2的方式指定要构建的模块;或者也可通过mvn install -f module1/pom.xml方式指定某个模块。

02-使用 Maven Wrapper

Maven Wrapper 是受 Gradle Wrapper 启发而来。它将 Maven 构建工具与项目工程打包放在一起,屏蔽了不同机器上构建环境不同而带来的一系列问题。 回想一下,在没有使用 Maven Wrapper 之前,我们是如何用 Maven 构建项目的,即mvn clean install,而使用 Maven Wrapper 之后呢?./mvnw clean install。 可以看到,使用方式基本没有什么变化。

仔细观察下我们使用的项目 payroll,与 Maven Wrapper 相关的有如下几部分:

  • .mvn/wrapper
  • mvnw
  • mvnw.cmd

注:后两个分别是 *nix 和 windows 平台用于替代 mvn 的可执行脚本。

如何将 Maven Wrapper 引入到项目中呢?在项目根目录下执行:

mvn wrapper:wrapper -Dmaven=3.5.4

注:3.5.4 指的是 Maven Wrapper 使用得 mvn 版本。如果要修改 mvn 的版本,可以修改 ${project.dir}/.mvn/wrapper/maven-wrapper.properties 中的 distributionUrl 即可。例如:

distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.5.4/apache-maven-3.5.4-bin.zip

使用 mvnw 时,每次都会检查 userhome/.m2/wrapper/dist目录是否存在{user_home}/.m2/wrapper/dist 目录是否存在 {project.dir}/.mvn/wrapper/maven-wrapper.properties 中指定的 mvn 版本,若没有则自动下载。

mvnw 使用的 settings.xml 文件必须在 userhome/.m2下才能生效,放在{user_home}/.m2 下才能生效,放在 {maven_home}/conf 下的 settings.xml 配置不生效。

refs