目录

Maven

一种标准的方式来构建项目,清楚地定义项目的组成,发布项目信息的简单方法,以及在多个项目之间共享 JAR 的方法。用于构建和管理任何基于 Java 的项目的工具。让 Java 开发人员的日常工作更轻松,并且有助于理解任何基于 Java 的项目。

Maven 的目标:

  • 简化构建过程
  • 提供统一的构建系统
  • 提供优质的项目信息
  • 提供更好的开发实践

Maven环境配置

首先去Maven官网,下载Maven的包,apache-maven-3.5.0-bin.zip

配置一下环境变量,和JDK的环境变量配置类似:

  1. 新建系统变量 MAVEN_HOME D:\Program Files\maven\apache-maven-3.5.0
  2. 编辑 Path 追加 %MAVEN_HOME%\bin

由于Maven依赖Java运行环境,因此使用Maven之前需要配置Java的运行环境。

windows+r打开cmd命令窗口,输入"mvn –version" 检查是否设置成功。

IDEA 设置 Maven 插件

IntlliJ IDEA 安装默认自带 Maven 插件,使用默认设置,每次新建项目自动应用。 如果有打开项目关闭先,右下角的 Configure -> Settings…-> 搜索 maven 修改

1
2
3
4
5
6
7
8
Maven home directory:
D:\Program Files\maven\apache-maven-3.5.0

User settings file:
D:\Program Files\maven\apache-maven-3.5.0\conf\settings.xml

Local repository:
D:\Program Files\maven\local-repository

阿里云Maven仓库地址——加速你的maven构建

修改 D:\Program Files\maven\apache-maven-3.5.0\conf\settings.xml 在 mirrors 标签对里面加入:

1
2
3
4
5
6
7
8
 <mirrors>
    <mirror>
        <id>nexus-aliyun</id>
        <mirrorOf>*</mirrorOf>
        <name>Nexus aliyun</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    </mirror>
  </mirrors>

SNAPSHOT 的 jar包的更新机制

maven 包的版本有两类,一类是 SNAPSHOT,一类是 RELEASE。

  • RELEASE 的包需要改 pom.xml 中的 <version> 的时候才会引入其他版本(如新版本)
  • 但是 SNAPSHOT 允许不改 <version> 而引入新版本(自动通过时间戳判断)

默认按天的触发频率太慢了,可以手动触发

方式一

1
2
# 可触发重新拉取  -e 异常便于定位 -B 避免人工参与交互
mvn clean compile -U -e -B

方式二 配置 settings.xml

1
2
3
4
<snapshots>
  <enabled>true</enabled>
  <updatePolicy>always</updatePolicy>
</snapshots>

方式三 配置IDE,以 IDEA 为例,Build, Execution, Deployment > Build Tools > Maven 在设置中勾上 Always update snapshots,在手工点击右侧Maven的刷新按钮即可触发

方式四 手工删除本地仓库的jar包,并点击 IDEA 右侧Maven的刷新按钮触发重新拉取

只 deploy 某些模块

1
2
mvn clean deploy -F -am
mvn clean deploy -pl module-a -am
1
2
3
4
<properties>
  <maven.deploy.skip>true</maven.deploy.skip>
  <maven.install.skip>true</maven.install.skip>
</properties>

在不需要的 module pom.xml

1
2
3
4
5
6
7
8
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-deploy-plugin</artifactId>
    <version>2.8.2</version>
    <configuration>
      <skip>true</skip>
    </configuration>
</plugin>
1
mvn dependency:tree