IDEA:Maven相关
跳到导航
跳到搜索
关于:一点疑惑
当前 IDEA 版本:2022.1 IDEA 本地 Maven 索引文件夹:“C:\Users\eijux\AppData\Local\JetBrains\IntelliJIdea2022.1\Maven\Indices”
关于:相关插件
Maven 相关的插件主要有三个(默认已绑定):
- Maven:提供 Maven 支持。
- “Maven 项目工具窗口”;
- 专用模块类型;
- Maven 仓库支持;
- pom.xml 文件完全编辑支持;
- 导入 Maven 方法支持;
- 运行和调试 Maven 目标;
- 编译;
- Maven Extension:提供 Web,JavaEE 和依赖分析图表的 Maven 支持。
- 在“Maven 项目工具窗口”的上下文菜单显示依赖命令;
- WAR 包;
- InterlliJ Pofiler对Maven运行配置的支持;
- Package Search:查找并管理 JVM 和 Kotlin 多平台项目依赖。
- 支持 Maven 和 Gradle 项目;
关于:“远程仓库”和“更新远程仓库索引”
远程仓库(settings.xml),主要是用于:1、“解析依赖(下载依赖项)”,2、“更新远程仓库索引”。 “更新远程仓库索引”用于:在“无网络”的情况下,提供“依赖提示”。 【参考:https://www.jetbrains.com/help/idea/maven-repositories.html】
不同的仓库:
- Central:
- “更新远程仓库索引”:较慢;
- AliMaven:
- “更新远程仓库索引”:不支持;
- Nexus2(本地):
- “更新远程仓库索引”:更新后无错误,但是 IDEA 本地 Maven 索引文件夹大小没有变化,不知道原因。
- Nexus3(本地):
- “更新远程仓库索引”:下载过程(450 M 左右)很快,但是索引处理(Processing indices)过程较长(大概五分钟),过程结束可以找到新的索引文件夹(780 M 左右);
关于使用 Nexus: 1、Nexus2、Nexus3 可能需要设置代理保证到 Central 的网络。 2、Nexus3 本身不支持下载代理仓库的索引文件,但是 IDEA 通过 Nexus 3 仍能进行“更新索引”操作。 3、Nexus2 直接下载远程仓库的索引文件在 1.5 G 作用,但是通过 IDEA 更新索引的下载内容在 400 M 左右,本地文件大小在 700 M 左右。
关于:“依赖提示”和“依赖搜索”
依赖提示
在 pom.xml 中,编辑依赖项时的提示。【需要插件“Maven”的支持】 可以在:1、“有网络”;2、“已更新远程仓库索引”的情况下使用。(二者都没有时,由于缓存可以显示部分内容) 【参考:https://www.jetbrains.com/help/idea/work-with-maven-dependencies.html#generate_maven_dependency】
使用:
- 通过网络搜索:(未更新索引)。
- 提示内容可能不完全、多次搜索提示内容不一样(猜测是网络原因);
- 如果没有默认提示,按下
Ctrl
+,
,可以强制搜索提示;
- 通过索引搜索:(已更新索引)。
- 默认即提示在索引中搜索到的所有内容;
- 重复按下
Ctrl
+,
之后,搜索并显示更多:- (扩大搜索范围:包、类、接口、枚举)
- (扩大搜索方式:关键字拆分)
依赖搜索
在 pom.xml 中,生成“添加依赖项”后,“依赖项窗口”的搜索框。【需要插件“Package Search”的支持】 必须在:“有网络”的情况下使用。 【参考:https://www.jetbrains.com/help/idea/package-search.html#packages_tool_window】
使用:
- 等效于,通过 IDEA 的“package-search”页面 搜索。
Maven 设置及说明
在 IDEA 中使用 Maven 前需要进行设置,以避免使用过程中的一些问题。 默认的 Maven 配置: 1、Maven 主路径:已捆绑(Maven3) ——【IDEA 自带的 Maven】 2、用户设置文件:${user.home}/.m2/settings.xml ——【默认的配置文件】 3、本地仓库:${user.home}/.m2/settings.xml/repository ——【默认的本地仓库地址(默认的配置文件中配置)】
步骤:
- 打开“系统设置”(
Ctrl + Alt
+S
)的 Maven 页: - 修改以下内容:
说明:“设置原型目录”
由于:每次创建 Maven 项目都会从远程仓库(Central)下载原型目录(archetype)。 于此,可以使用此配置,用于加速 Maven 项目创建。
说明:“忽略 SSL 证书验证”
对于:使用某些“不支持 http 下载,只支持 https”的远程仓库(如:阿里云),可以使用此配置。
关于“新项目设置”
如果不修改“新项目设置”下的 Maven 相关项,那么每次在创建 Maven 项目时都会去采用“系统默认”的 Maven 配置,而非“全局配置”的 Maven 配置。
步骤:
更新远程仓库索引
为 Maven 配置了 setting.xml 之后: 1、仓库显示的远程仓库地址是实际使用的 URL(如果被设置了镜像,就是镜像的地址)。 2、更新仓库索引可能失败,有以下两种情况。
更新失败:网络问题
错误信息:“Cannot connect to the Maven process. Try again later. If the problem presists, check the Maven Importing JDK settings and restart Intelli IDEA”。 由于网络原因,无法连接到该远程仓库。
解决:
- 方式一:使用国内仓库或镜像。
- 方式二:设置代理:
- “
Ctrl + Alt
+S
”-> ... ->“Maven”->“importing”:在“VM options for importer”项,添加: -DproxySet=true -DproxyHost=127.0.0.1 -DproxyPort=10800
- 如果使用 shadowsocks:相关地址不在 PAC 名单中,所以可能需要使用全局模式。
- “
更新失败:该仓库不支持仓库索引
错误信息:“Repository is non-nexus repo, or is not indexed”。 配置的远程仓库不支持索引。(如:阿里云)
解决:使用支持索引的 Maven 仓库;
其他思路:
针对于以上两个问题: 1、国外仓库支持索引,但网络不稳定; 2、国内仓库网络稳定,但不支持索引。 除了使用代理,还有其他思路。
一、使用 Nexus 私服
用私服代理远程仓库,需要: 1、保证本地到私服的网络; 2、保证私服到被代理仓库的网络;(问题一) 3、保证被代理的仓库支持索引;(问题二) 【其实就是转移问题了】 参考: 1、“利用nexus私服,解决IDEA无法下载maven仓库索引文件的终极解决方案” 2、“IDEA Maven Repositiory Index 错误/ resource nexus-maven-repository-index.properties does not exist”
二、利用本地 Web 服务作为索引下载服务器
步骤: 1、下载两个文件:nexus-maven-repository-index.properties、nexus-maven-repository-index.gz; 2、启动本地 Web 服务,在其根目录下建立一个“/maven2/.index”的虚拟目录,并把上述两个文件拷贝至该虚拟目录下; (注意:如果你使用的是 Windows 系统,可能无法建立“.index”件夹,必须使用 DOS 命令:mkdir .index
)。 3、编辑 host 文件(“C:\Windows\System32\drivers\etc\hosts”),在尾巴追加127.0.0.1 repo1.maven.org
; 4、在 IDEA 上更新 Maven 插件索引; 5、删除 host 中(第三步)添加的内容。 参考: 1、Intellij IDEA利用Maven索引实现自动补全
使用:为项目添加依赖项
一般可以通过 mvnrepository 网站 搜索软件包的依赖配置信息,然后直接复制到项目的“pom.xml”文件中。
如果要通过 IDEA 添加依赖项,有以下两种方式。(需要 IDEA 的 Maven 索引)
方法一:通过“依赖项模板”
步骤:
- 打开“pom.xml”文件;
- 使用
Alt
+Insert
,并选择“依赖项模板”; - 在模板中分别输入相关内容;【有代码提示,但较慢】
- 加载 Maven 变更;
方法二:通过“依赖搜索窗口”
步骤:
- 打开“pom.xml”文件;
- 使用
Alt
+Insert
,并选择“添加依赖项”; - 在“依赖项窗口”:
- 上侧:搜索栏,输入关键字;
- 左侧:结果列表,点击依赖,并选择版本;
- 右侧:显示软件包详情(包括:仓库、项目站点、文档、自述文件等);
- 点击“添加”;
- 加载 Maven 变更;
修改依赖项版本(升级)
步骤:
- 在“依赖项窗口”:选择需要修改的依赖项的版本;
- 加载 Maven 变更;
使用:创建 Maven 项目
创建 Maven 项目,即:从 Archetype (原型、模板)创建一个 Maven 项目。 开发人员可以在此基础上进行扩展开发。
关于“-DarchetypeCatalog”参数
IDEA 创建 Maven 项目的实质:根据 maven archetype(原型)的配置,执行 mvn archetype:generate
命令。
该命令执行时,需要指定一个“archetype-catalog.xml”文件(约为 12 M)。
参数“-DarchetypeCatalog”,用于指定“archetype-catalog.xml”文件的获取方式:
- remote:,即,从“远程”获取;——【即:“中央仓库”的“http://repo1.maven.org/maven2/archetype-catalog.xml”路径】
- (默认)
- 下载速度很慢,容易导致创建过程卡住。
- internal:从“内部”获取;——【即:“maven-archetype-plugin”内置的 archetypeCatalog 文件】
- (建议)
- local:即,从“本地”获取;——【即:设置的本地仓库中】
- 需要保存“archetype-catalog.xml”文件,至本地(“${localRepository})\org\apache\maven\archetypes\archetype-catalog\<版本>”)。
- 使用“在 IDEA 中添加的指定路径”:
- 需要保存“archetype-catalog.xml”文件,至该路径。
下载“archetype-catalog.xml”(右键保存)
FAQ
为什么“${user.home}/.m2/repository”中有下载内容?
即使在 IDEA 全局配置中修改了 Maven 配置文件地址,即使 settings.xml 中指定本地仓库到了其他位置。 在“${user.home}/.m2/repository”下依然会时不时有新下载的依赖包。
可能是因为:
- 系统设置中:
- 仍然使用 IDEA 中默认绑定的“Bundled(Maven 3)”;
- 依然使用默认的 Maven 配置(配置文件“${user.home}/.m2/settings.xml”),指定的仓库地址为“${user.home}/.m2/repository”;
- 使用的“settings.xml”中设置的本地仓库为“${user.home}/.m2/repository”;
- 新项目设置中:
- 仍然使用 IDEA 中默认绑定的“Bundled(Maven 3)”;
- 依然使用默认的 Maven 配置(配置文件“${user.home}/.m2/settings.xml”),指定的仓库地址为“${user.home}/.m2/repository”;
- 使用的“settings.xml”中设置的本地仓库为“${user.home}/.m2/repository”;
- 通过 IDEA 下载的依赖项,默认地址即为“${user.home}/.m2/repository”;
通过 IDEA 和 Maven 添加的依赖项,对比:
错误:Clean 等命令运行错误
描述:双击“Mavne 项目工具窗口”的 Clean 等命令时,收到错误信息:
Error occurred during initialization of VM Unable to allocate 130176KB bitmaps for parallel garbage collection for the requested 4165632KB heap.
解决:在“VM options for importer”中,添加:-Xmx4096M
错误:“Maven Projects Tool Window”的红线提示
描述:在“Maven 项目工具窗口”的依赖项中,部分依赖下有红线提示,但问题窗口并没有关于项目的任何错误信息。
解决:在 pom.xml 文件中:
- 剪掉对应依赖,加载 maven 变更;
- 贴上对应依赖,加载 maven 变更;
错误:“Invalid packaging for parent POM ..., must be "pom" but is "jar"”
描述:项目(Project)下存在多个模块(Module),且项目、模块下均存在“pom.xml”时,收到错误信息:
[ERROR] Maven model problem: Invalid packaging for parent POM com.eijux:Eijux:1.0-SNAPSHOT (D:\Documents\IdeaProjects\Eijux\pom.xml), must be "pom" but is "jar" at D:\Documents\IdeaProjects\Eijux\pom.xml:-1:-1
解决:为 Parent 的 pom.xml 添加:<packaging>pom</packaging>
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <packaging>pom</packaging> <groupId>com.eijux</groupId> <artifactId>Eijux</artifactId> <version>1.0-SNAPSHOT</version> ...
错误:“Could not find artifact ... in nexus3 (http://localhost:8091/repository/maven-public/)”
描述:修改 pom.xml 后 Reload 时,收到错误信息:
Could not find artifact org.springframework.boot:spring-boot-starter-hateoas:pom:3.0.0 in nexus3 (http://localhost:8091/repository/maven-public/)
- Maven 配置的镜像为:本机搭建的 Nexus3(http://localhost:8091/repository/maven-public/)
解决:
- 原因可能是:
- Nexus3 未启动;
- Nexus3 不能连接到代理仓库(此时代理仓库状态为“???”);
- 大概就是不能通过“127.0.0.1:10800”连接到远程仓库,之前为 Nexus3 设置了 代理,现在代理失效导致。
- Nexus3 未更新远程索引(此时代理仓库状态为“Online - Ready to Connect”);
总之,保证 Nexus3 启动,且代理仓库的状态为“Online - Remote Available”则可正常使用,再有异常可能是网络状况不好。