Maven初学者指南:详细安装与配置

404 阅读4分钟

Maven是一个流行的项目管理和理解工具,用于构建、管理和了解Java项目。这个详细的指南将帮助你从安装Maven开始,一直到配置Maven环境变量和使用Maven Wrapper。

1. 安装Maven

Windows系统

步骤1:下载Maven

  1. 访问Apache Maven的官方网站:maven.apache.org/
  2. 点击“Download Maven”,选择最新的稳定版本。
  3. 下载.zip.tar.gz归档文件。

步骤2:解压Maven

  1. 打开下载的文件,右键选择“解压到...”,选择一个解压路径,例如:C:\Program Files\Apache\maven

步骤3:设置环境变量

  1. 右键点击“此电脑”或“我的电脑”,选择“属性”。

  2. 点击“高级系统设置”。

  3. 在系统属性窗口,点击“环境变量”。

  4. 在“系统变量”区域,点击“新建”。

    • 变量名:MAVEN_HOME
    • 变量值:C:\Program Files\Apache\maven(Maven的安装路径)
  5. 在“系统变量”中找到“Path”变量,点击“编辑”。

  6. 点击“新建”,添加%MAVEN_HOME%\bin

步骤4:验证安装

  1. 打开命令提示符。
  2. 输入命令:mvn -version
  3. 如果安装成功,你将看到Maven的版本信息。

macOS和Linux系统

步骤1:使用包管理器安装Maven

  • Debian/Ubuntu系统

    bash
    sudo apt-get update
    sudo apt-get install maven
    
  • macOS

    bash
    brew update
    brew install maven
    

步骤2:验证安装

  1. 打开终端。
  2. 输入命令:mvn -version
  3. 如果安装成功,你将看到Maven的版本信息。

2. 配置Maven环境变量

Windows系统

确保MAVEN_HOMEPath变量正确设置。

macOS和Linux系统

通常不需要设置环境变量,但可以设置M2_HOME环境变量,方便使用。

bash
export M2_HOME=/usr/localCellar/maven/3.6.3/libexec
export PATH=$M2_HOME/bin:$PATH

3. Maven 工程结构

  1. 基于第三方工具或框架的约定 Maven 对工程目录结构的要求

image-20220531105056629

4. Maven 构建

构建过程主要包含以下环节: 83bbd7b5f1b6b4e4a5d936e264b1264d_c52769d3f81b03addf9988db6a56283e.png

5. 配置settings.xml

settings.xml文件位于Maven安装目录下的conf目录中。

修改配置

  1. 打开settings.xml文件。
  2. 添加镜像配置以加速依赖下载:
<settings>
  <mirrors>
    <mirror>
      <id>aliyunmaven</id>
      <name>Aliyun Maven Mirror</name>
      <url>https://maven.aliyun.com/repository/public</url>
      <mirrorOf>central</mirrorOf>
    </mirror>
  </mirrors>
</settings>

6. 安装和使用Maven Wrapper

Maven Wrapper是一个工具,允许在没有安装Maven的情况下运行Maven构建。

初始化Maven Wrapper

  1. 在项目根目录下运行:
mvn -N wrapper
  1. 这将下载Wrapper所需的文件到项目目录下的.mvn/wrapper

构建项目

  1. 使用Wrapper构建项目:
./mvnw clean install
  • 在Windows上使用:
mvnw.bat clean install

7. Maven profile 多环境管理

在开发过程中,我们的软件会面对不同的运行环境,比如开发环境、测试环境、生产环境,而我们的软件在不同的环境中,有的配置可能会不一样,比如数据源配置、日志文件配置、以及一些软件运行过程中的基本配置,那每次我们将软件部署到不同的环境时,都需要修改相应的配置文件,这样来回修改,很容易出错,而且浪费劳动力。

因此我们可以利用 Maven 的 profile 来进行定义多个 profile,然后每个profile对应不同的激活条件和配置信息,从而达到不同环境使用不同配置信息的效果。

<build>
    <!-- profile对资源的操作 -->
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <!-- 先排除所有环境相关的配置文件 -->
            <excludes>
                <exclude>application*.yml</exclude>
            </excludes>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
            <!-- 是否替换 @xx@ 表示的maven properties属性值 -->
            <!--通过开启 filtering,maven 会将文件中的 @xx@ 替换 profile 中定义的 xx 变量/属性-->
            <filtering>true</filtering>
            <includes>
                <include>application.yml</include>
                <include>application-${profileActive}.yml</include>
            </includes>
        </resource>
    </resources>
</build>


<!--多环境文件配置-->
<profiles>
    <!--开发环境-->
    <profile>
        <id>dev</id>
        <activation>
            <!--默认激活-->
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <profileActive>dev</profileActive>
        </properties>
    </profile>
    <!--测试环境-->
    <profile>
        <id>test</id>
        <properties>
            <profileActive>test</profileActive>
        </properties>
    </profile>
    <!--正式环境-->
    <profile>
        <id>prod</id>
        <properties>
            <profileActive>prod</profileActive>
        </properties>
    </profile>
</profiles>

在 idea 中可以看到,因此,当你需要打包哪一个环境的就勾选即可: d1c7651453a37c1f399e969700eae486_d6f13944c48be81c2b724eff49ff86a2.png 同时,SpringBoot 天然支持多环境配置,一般来说,application.yml存放公共的配置,application-dev.yml、application-test.yml、application.prod.yml分别存放三个环境的配置。如下: 492f32c48d78e67b77cd5f243ee815dd_12a7514431061d223164c21dd4e5c53b.png application.yml 中配置spring.profiles.active=prod(或者dev、test)指定使用的配置文件,如下: 80862f39bede6589fd76e47d1a9e088e_28a1cfc6e21e2dbb06d91deee5a0ed75.png 注:profileActive,就是上面我们自定义的标签。然后当我们勾选哪一个环境,打包的配置文件就是那一个环境: ca919462bc226b3a304bfc13e9ff1843_623119cb7a1df44b3093ba4bb8d4427c.png 同时我们再在 resource 标签下看到 includes 和 excludes 标签。它们的作用是:

  • includes:指定执行 resource 阶段时要包含到目标位置的资源
  • excludes:指定执行 resource 阶段时要排除的资源