如何配置Maven使依赖从远程下载后第二次起从本地m2目录获取
Maven本地优先拉取依赖配置方案
Maven默认会优先读取本地~/.m2/repository(也就是你说的m2路径)下的已有依赖,默认仅对SNAPSHOT版本依赖每日检查远程更新、RELEASE版本不会重复拉取。如果要彻底避免每次构建都查询远程站点,可以通过以下配置实现:
方案1:全局配置(推荐,对所有Maven项目生效)
修改Maven全局配置文件settings.xml,文件默认路径为:
- 当前用户目录下:
${user.home}/.m2/settings.xml(优先读取) - Maven安装目录下:
${MAVEN_HOME}/conf/settings.xml
在配置文件中调整对应规则:
<settings> <!-- 确认本地仓库路径,默认就是这个,不用改的话可以不写 --> <localRepository>${user.home}/.m2/repository</localRepository> <profiles> <profile> <id>local-first</id> <activation> <activeByDefault>true</activeByDefault> </activation> <repositories> <repository> <id>central</id> <url>https://repo1.maven.org/maven2</url> <releases> <updatePolicy>never</updatePolicy> <!-- 已有RELEASE版本永远不查远程更新 --> </releases> <snapshots> <updatePolicy>never</updatePolicy> <!-- 已有SNAPSHOT版本永远不查远程更新 --> </snapshots> </repository> <!-- 把你用到的spring仓库也加进来配置同样规则 --> <repository> <id>spring-milestones</id> <url>https://repo.spring.io/milestone</url> <releases><updatePolicy>never</updatePolicy></releases> <snapshots><enabled>false</enabled></snapshots> </repository> <repository> <id>spring-snapshots</id> <url>https://repo.spring.io/snapshot</url> <releases><enabled>false</enabled></releases> <snapshots><updatePolicy>never</updatePolicy></snapshots> </repository> </repositories> <!-- 插件仓库也配置同样规则 --> <pluginRepositories> <pluginRepository> <id>central</id> <url>https://repo1.maven.org/maven2</url> <releases><updatePolicy>never</updatePolicy></releases> <snapshots><updatePolicy>never</updatePolicy></snapshots> </pluginRepository> <pluginRepository> <id>spring-milestones</id> <url>https://repo.spring.io/milestone</url> <releases><updatePolicy>never</updatePolicy></releases> <snapshots><enabled>false</enabled></snapshots> </pluginRepository> <pluginRepository> <id>spring-snapshots</id> <url>https://repo.spring.io/snapshot</url> <releases><enabled>false</enabled></releases> <snapshots><updatePolicy>never</updatePolicy></snapshots> </pluginRepository> </pluginRepositories> </profile> </profiles> </settings>
方案2:单项目配置(仅对当前Spring Boot项目生效)
直接修改你当前项目的pom.xml,给已配置的仓库规则增加updatePolicy配置即可,修改后的repositories和pluginRepositories部分如下:
<repositories> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> <snapshots> <enabled>false</enabled> </snapshots> <releases> <updatePolicy>never</updatePolicy> </releases> </repository> <repository> <id>spring-snapshots</id> <name>Spring Snapshots</name> <url>https://repo.spring.io/snapshot</url> <releases> <enabled>false</enabled> </releases> <snapshots> <updatePolicy>never</updatePolicy> </snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> <snapshots> <enabled>false</enabled> </snapshots> <releases> <updatePolicy>never</updatePolicy> </releases> </pluginRepository> <pluginRepository> <id>spring-snapshots</id> <name>Spring Snapshots</name> <url>https://repo.spring.io/snapshot</url> <releases> <enabled>false</enabled> </releases> <snapshots> <updatePolicy>never</updatePolicy> </snapshots> </pluginRepository> </pluginRepositories>
方案3:单次构建临时生效
如果不需要永久配置,只是某次构建不想走远程,直接在构建命令后加-o参数开启离线模式即可,Maven会完全读取本地仓库内容,不会发起任何远程请求:
# 示例:离线模式打包项目 mvn clean package -o
注意事项
- 配置
updatePolicy:never后,如果需要拉取远程最新的SNAPSHOT依赖,可临时加-U参数执行构建强制更新:mvn clean package -U - 离线模式下如果本地缺少对应依赖,会直接构建失败,需要先关闭离线模式完成依赖下载后再使用
内容的提问来源于stack exchange,提问作者Krishna
相关产品推荐
相关产品推荐

