“IDEA:Maven相关”的版本间差异

来自Wikioe
跳到导航 跳到搜索
→‎FAQ
 
(未显示同一用户的21个中间版本)
第1行: 第1行:
[[category:IDEA]]
[[category:IDEA]]


== 关于:一些功能的疑惑 ==
== 关于:一点疑惑 ==
  【时间:2022/05/09 18:17:15】
  当前 IDEA 版本:2022.1
   
   
  【当前 IDEA 版本:'''2022.1'''】
  IDEA 本地 Maven 索引文件夹:“C:\Users\eijux\AppData\Local\JetBrains\IntelliJIdea2022.1\Maven\Indices”
【IDEA 本地 Maven 索引文件夹:“C:\Users\eijux\AppData\Local\JetBrains\IntelliJIdea2022.1\Maven\Indices”】


由于使用 IDEA 过程中,Maven 的一些设置、功能与 Eclipse 差异较大,对于其作于和相互影响不明。
=== 关于:相关插件 ===
Maven 相关的插件主要有三个(默认已绑定):
# '''Maven''':提供 Maven 支持。
#*“Maven 项目工具窗口”;
#* 专用模块类型;
#* '''Maven 仓库支持''';
#* '''pom.xml 文件完全编辑支持''';
#* 导入 Maven 方法支持;
#* 运行和调试 Maven 目标;
#* 编译;
#: [[File:IDEA:插件:Maven.png|400px]]
# '''Maven Extension''':提供 Web,JavaEE 和依赖分析图表的 Maven 支持。
#* 在“Maven 项目工具窗口”的上下文菜单显示依赖命令;
#* WAR 包;
#* InterlliJ Pofiler对Maven运行配置的支持;
#: [[File:IDEA:插件:Maven Extension.png|400px]]
# '''Package Search''':查找并管理 JVM 和 Kotlin 多平台项目依赖。
#* 支持 Maven 和 Gradle 项目;
#: [[File:IDEA:插件:Package Search.png|400px]]


处于好奇测试了一下,以下内容为总结,须待查看官网文档确认。
=== 关于:“远程仓库”和“更新远程仓库索引” ===
 
  远程仓库(settings.xml),主要是用于:1、“'''解析依赖(下载依赖项)'''”,2、“'''更新远程仓库索引'''”。
=== 关于:依赖提示、依赖搜索 ===
  根据网上的相关搜索,更新 Maven 远程仓库的索引,应该是为“依赖提示”和“依赖搜索”提供支持,
<big><span style="color: blue">'''“更新远程仓库索引”用于:在“无网络”的情况下,提供“依赖提示”。'''</span></big>
   
   
  但是实际测试发现:“更新索引”(甚至,本地文件中远程仓库索引存在与否),对于以上两者影响并不大。
  【参考:[https://www.jetbrains.com/help/idea/maven-repositories.html https://www.jetbrains.com/help/idea/maven-repositories.html]】


通过测试:
不同的仓库:
# '''依赖提示''':(在 pom.xml 中编辑依赖项时,会有代码提示)
# Central:
## 与网络:
#*“更新远程仓库索引”:较慢;
##* 有网时:联网搜索(无需代理),并提示;
##* 无网时:使用搜索过的缓存,但搜索新内容则无提示;
## 与“更新索引”:无关。(删除本地索引文件后,仍可使用)
##* 但更新索引之后,好像结果会更多???
## 与“settings.xml”:无关。(删除所有仓库及镜像设置后,仍可使用)
# '''依赖搜索''':(在 pom.xml 中生成“添加依赖项”后,依赖项窗口的搜索框)
## 与网络:必须联网使用,无任何缓存;
## 与与“更新索引”:无关。(删除本地索引文件后,仍可使用)
## 与“settings.xml”:无关。(删除所有仓库及镜像设置后,仍可使用)
 
=== 关于:不同的远程仓库 ===
设置不同的远程仓库(settings.xml),主要是用于“'''解析依赖'''、'''下载依赖项'''”,并且对于“更新仓库索引”操作也有影响。
 
通过测试:
# AliMaven:
# AliMaven:
## “解析依赖、下载依赖项”:正常;
#*“更新远程仓库索引”:'''不支持''';
## “更新索引”操作:并不支持更新仓库索引的操作;
# Nexus2(本地):
# Nexus2(本地):
## “解析依赖、下载依赖项”:正常;
#*“更新远程仓库索引”:更新后无错误,但是 IDEA 本地 Maven 索引文件夹大小没有变化,不知道原因。
## “更新索引”操作:支持更新仓库索引;
##* 更新后无错误,但是 IDEA 本地 Maven 索引文件夹大小没有变化,不知道原因。
# Nexus3(本地):
# Nexus3(本地):
## “解析依赖、下载依赖项”:正常;
#*“更新远程仓库索引”:下载过程(450 M 左右)很快,但是'''索引处理'''(Processing indices)过程较长(大概五分钟),过程结束可以找到新的索引文件夹(780 M 左右);
## “更新索引”操作:支持更新仓库索引;
##* 更新时:下载过程(700 M 左右)很快,但是索引处理(Processing indices)过程很长(十几分钟???);


* Nexus2、Nexus3 设置了代理保证到 Central 的网络。
关于使用 Nexus:
1、Nexus2、Nexus3 可能需要设置代理保证到 Central 的网络。
2、Nexus3 本身不支持下载代理仓库的索引文件,但是 IDEA 通过 Nexus 3 仍能进行“更新索引”操作。
3、Nexus2 直接下载远程仓库的索引文件在 1.5 G 作用,但是通过 IDEA 更新索引的下载内容在 400 M 左右,本地文件大小在 700 M 左右。


  Nexus3 本身不支持下载代理仓库的索引文件,但是 IDEA 通过 Nexus 3 仍能进行“更新索引”操作。
=== 关于:“依赖提示”和“依赖搜索” ===
 
==== 依赖提示 ====
  在 pom.xml 中,编辑依赖项时的提示。【需要插件“'''Maven'''”的支持】
   
   
  Nexus2 直接下载远程仓库的索引文件在 1.5 G 作用,但是通过 IDEA 更新索引的下载内容在 400 M 左右,本地文件大小在 700 M 左右。
  可以在:1、“'''有网络'''”;2、“'''已更新远程仓库索引'''”的情况下使用。(二者都没有时,由于缓存可以显示部分内容)
【参考:[https://www.jetbrains.com/help/idea/work-with-maven-dependencies.html#generate_maven_dependency https://www.jetbrains.com/help/idea/work-with-maven-dependencies.html#generate_maven_dependency]】
 
使用:
# 通过<big><span style="color: green">'''网络搜索'''</span></big>:(未更新索引)。
#* 提示内容可能不完全、多次搜索提示内容不一样(猜测是网络原因);
#* 如果没有默认提示,按下 '''<code>Ctrl</code> + <code>,</code>''',可以强制搜索提示;
# 通过<big><span style="color: green">'''索引搜索'''</span></big>:(已更新索引)。
#* 默认即提示在索引中搜索到的所有内容;
 
* 重复按下 '''<code>Ctrl</code> + <code>,</code>''' 之后,搜索并显示更多:
**(扩大搜索范围:包、类、接口、枚举)
**(扩大搜索方式:关键字拆分)


===关于:“更新索引”的作用 ===
==== 依赖搜索 ====
  如上:
  在 pom.xml 中,生成“添加依赖项”后,“依赖项窗口”的搜索框。【需要插件“'''Package Search'''”的支持】
   
   
  1、“更新索引”这一操作前后(前:移除索引文件;后:更新索引操作),对于“依赖提示、依赖搜索”并没有太大影响。
  必须在:“'''有网络'''”的情况下使用。
   
   
  2、对于“解析依赖、下载依赖项”,也只是选用不同的远程仓库会有影响。
  【参考:[https://www.jetbrains.com/help/idea/package-search.html#packages_tool_window https://www.jetbrains.com/help/idea/package-search.html#packages_tool_window]】


=== 总结 ===
使用:
如上:
: 等效于,通过 <big>'''[https://package-search.jetbrains.com/ IDEA 的“package-search”页面]'''</big> 搜索。
# “依赖提示”、“依赖搜索”:仅与网络有关。(但从哪里搜索???)
* 没有网络则不能使用;
# “解析依赖”、“下载依赖项”:仅与远程仓库设置(settings.xml)有关。
* 支持的仓库:
# “更新索引”操作:意义不明???
*: [[File:IDEA:插件:Package Search:支持的仓库.png|600px]]


== Maven 设置及说明 ==
== Maven 设置及说明 ==
第105行: 第122行:


== 更新远程仓库索引 ==
== 更新远程仓库索引 ==
  Maven 仓库索引,用于在“为项目添加依赖项”时,提供代码提示、结构搜索。【如上节所示】
  Maven 配置了 setting.xml 之后:
1、仓库显示的远程仓库地址是实际使用的 URL(如果被设置了镜像,就是镜像的地址)。
   
   
  IDEA 的 Maven 索引位置:“C:\Users\eijux\AppData\Local\JetBrains\IntelliJIdea2022.1\Maven\Indices”
  2、更新仓库索引可能失败,有以下两种情况。


: [[File:IDEA:Maven更新仓库索引.png|600px]]
: [[File:IDEA:Maven更新仓库索引.png|600px]]
为 Maven 配置了 setting.xml 之后,更新仓库索引可能失败,有以下两种情况。


=== 更新失败:网络问题 ===
=== 更新失败:网络问题 ===
第135行: 第151行:
'''解决''':使用支持索引的 Maven 仓库;
'''解决''':使用支持索引的 Maven 仓库;


=== 另一个思路:使用 Nexus 私服 ===
 
=== 其他思路: ===
  针对于以上两个问题:
  针对于以上两个问题:
     1、国外仓库支持索引,但网络不稳定;
     1、国外仓库支持索引,但网络不稳定;
     2、国内仓库网络稳定,但不支持索引。
     2、国内仓库网络稳定,但不支持索引。
   
   
  除了使用代理,还有另一种思路:'''使用 nexus 建立 Maven 私服'''。
  除了使用代理,还有其他思路。
 
==== 一、使用 Nexus 私服 ====
用私服代理远程仓库,需要:
1、保证本地到私服的网络;
   
   
2、保证私服到被代理仓库的网络;(问题一)
   
   
    用私服代理远程仓库,只要保证本地到私服的网络畅通即可。(如果是在本地搭建私服,则同样需要解决私服到远程仓库的网络问题)
3、保证被代理的仓库支持索引;(问题二)
【其实就是转移问题了】
   
   
   
   
第150行: 第175行:
     2、“[https://blog.csdn.net/u010165638/article/details/89948308 IDEA Maven Repositiory Index 错误/ resource nexus-maven-repository-index.properties does not exist]”
     2、“[https://blog.csdn.net/u010165638/article/details/89948308 IDEA Maven Repositiory Index 错误/ resource nexus-maven-repository-index.properties does not exist]”


见:'''[[Maven:settings.xml示例#示例二:使用_nexus2/3]]'''
: 见:'''[[Maven:settings.xml示例#示例二:使用_nexus2/3]]'''
 
==== 二、利用本地 Web 服务作为索引下载服务器 ====
步骤:
1、下载两个文件:[https://repo1.maven.org/maven2/.index/nexus-maven-repository-index.properties nexus-maven-repository-index.properties]、[https://repo1.maven.org/maven2/.index/nexus-maven-repository-index.gz nexus-maven-repository-index.gz];
2、启动本地 Web 服务,在其根目录下建立一个“/maven2/.index”的虚拟目录,并把上述两个文件拷贝至该虚拟目录下;
  (注意:如果你使用的是 Windows 系统,可能无法建立“.index”件夹,必须使用 DOS 命令:<syntaxhighlight lang="bash" inline>mkdir .index</syntaxhighlight>)。
3、编辑 host 文件(“C:\Windows\System32\drivers\etc\hosts”),在尾巴追加<syntaxhighlight lang="xml" inline>127.0.0.1 repo1.maven.org</syntaxhighlight>;
4、在 IDEA 上更新 Maven 插件索引;
5、删除 host 中(第三步)添加的内容。
参考:
   1、[https://www.jyoryo.com/archives/25.html Intellij IDEA利用Maven索引实现自动补全]


== 使用:为项目添加依赖项 ==
== 使用:为项目添加依赖项 ==
第157行: 第200行:
  如果要通过 IDEA 添加依赖项,有以下两种方式。(需要 IDEA 的 Maven 索引)
  如果要通过 IDEA 添加依赖项,有以下两种方式。(需要 IDEA 的 Maven 索引)


=== 方法一:通过“依赖搜索窗口” ===
=== 方法一:通过“依赖项模板” ===
: [[File:IDEA:添加依赖项_2.png|400px]]
 
步骤:
# 打开“pom.xml”文件;
# 使用 '''<code>Alt</code> + <code>Insert</code>''',并选择“'''依赖项模板'''”;
# 在模板中分别输入相关内容;【有代码提示,但较慢】
# 加载 Maven 变更;
 
=== 方法二:通过“依赖搜索窗口” ===
: [[File:IDEA:添加依赖项.png|600px]]
: [[File:IDEA:添加依赖项.png|600px]]


第170行: 第222行:
# 加载 Maven 变更;
# 加载 Maven 变更;


=== 方法二:通过“依赖项模板” ===
==== 修改依赖项版本(升级) ====
: [[File:IDEA:添加依赖项_2.png|400px]]
: [[File:IDEA:设置依赖项版本.png|800px]]


步骤:
步骤:
# 打开“pom.xml”文件;
# 在“依赖项窗口”:选择需要修改的依赖项的版本;
# 使用 '''<code>Alt</code> + <code>Insert</code>''',并选择“'''依赖项模板'''”;
# 在模板中分别输入相关内容;【有代码提示,但较慢】
# 加载 Maven 变更;
# 加载 Maven 变更;


第189行: 第239行:


=== 关于“-DarchetypeCatalog”参数 ===
=== 关于“-DarchetypeCatalog”参数 ===
  IDEA 创建 Maven 项目的实质:根据 maven '''archetype'''(原型)的配置,执行'''<syntaxhighlight lang="badh" inline>mvn archetype:generate</syntaxhighlight>'''命令。
  IDEA 创建 Maven 项目的实质:根据 maven '''archetype'''(原型)的配置,执行 '''<syntaxhighlight lang="bash" inline>mvn archetype:generate</syntaxhighlight>''' 命令。
   
   
  该命令执行时,需要指定一个“'''archetype-catalog.xml'''”文件(约为 12 M)。
  该命令执行时,需要指定一个“'''archetype-catalog.xml'''”文件(约为 12 M)。
第209行: 第259行:
== FAQ ==
== FAQ ==
=== 为什么“${user.home}/.m2/repository”中有下载内容? ===
=== 为什么“${user.home}/.m2/repository”中有下载内容? ===
----
  即使在 IDEA 全局配置中修改了 Maven 配置文件地址,即使 settings.xml 中指定本地仓库到了其他位置。
  即使在 IDEA 全局配置中修改了 Maven 配置文件地址,即使 settings.xml 中指定本地仓库到了其他位置。
   
   
  在“${user.home}/.m2/repository”下依然会时不时有新下载的依赖包。
  在“${user.home}/.m2/repository”下依然会时不时有新下载的依赖包。


这是因为:
可能是因为:
# IDEA 的新项目设置,依然使用“系统默认”的 Maven 配置(配置文件“${user.home}/.m2/settings.xml”),而非“全局配置”的 Maven 配置;
# 系统设置中:
#${user.home}/.m2/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”;
#: [[File:IDEA:通过IDEA添加依赖项(不使用Maven).png|600px]]


=== Maven窗口的红线提示 ===
  通过 IDEA 和 Maven 添加的依赖项,对比:
  Maven 窗口的依赖项中,部分依赖下有红线提示,但问题窗口并没有关于项目的任何错误信息。
  [[File:IDEA:通过IDEA和Maven管理的依赖项.png|600px]]
: [[File:IDEA:Maven窗口的红线.png|600px]]


解决,在 pom.xml 文件中:
=== 错误:Clean 等命令运行错误 ===
----
'''描述:'''双击“Mavne 项目工具窗口”的 Clean 等命令时,收到错误信息:
: <syntaxhighlight lang="bash" highlight="">
Error occurred during initialization of VM
    Unable to allocate 130176KB bitmaps for parallel garbage collection for the requested 4165632KB heap.
</syntaxhighlight>
: [[File:IDEA:Maven运行Clean错误.png|600px]]
 
'''解决:'''在“VM options for importer”中,添加:<span style="color: blue">-Xmx4096M</span>
: 设置位置:“<code>Ctrl + Alt</code> + <code>S</code>”->  ...  ->“Maven”->“importing”;
: [[File:IDEA:Maven运行Clean错误:解决.png|600px]]
 
=== 错误:“Maven Projects Tool Window”的红线提示 ===
----
'''描述:'''在“Maven 项目工具窗口”的依赖项中,部分依赖下有红线提示,但问题窗口并没有关于项目的任何错误信息。
: [[File:IDEA:Maven窗口的红线.png|400px]]
 
'''解决:'''在 pom.xml 文件中:
# 剪掉对应依赖,加载 maven 变更;
# 剪掉对应依赖,加载 maven 变更;
# 贴上对应依赖,加载 maven 变更;
# 贴上对应依赖,加载 maven 变更;


=== Maven 的 Clean 命令运行错误 ===
=== 错误:“Invalid packaging for parent POM ..., must be "pom" but is "jar"” ===
双击 Mavne 窗口的 Clean 等命令时,收到错误信息:
----
     Error occurred during initialization of VM
'''描述:'''项目(Project)下存在多个模块(Module),且项目、模块下均存在“pom.xml”时,收到错误信息:
     Unable to allocate 130176KB bitmaps for parallel garbage collection for the requested 4165632KB heap.
: <syntaxhighlight lang="bash" highlight="">
: [[File:IDEA:Maven运行Clean错误.png|600px]]
[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
</syntaxhighlight>
 
'''解决:'''为 Parent pom.xml 添加:<span style="color: blue"><packaging>pom</packaging></span>
: <syntaxhighlight lang="xml" highlight="6">
<?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>
   
    ...
</syntaxhighlight>
 
=== 错误:“Could not find artifact ... in nexus3 (http://localhost:8091/repository/maven-public/)” ===
----
'''描述:'''修改 pom.xml 后 Reload 时,收到错误信息:
: <syntaxhighlight lang="bash" highlight="">
Could not find artifact org.springframework.boot:spring-boot-starter-hateoas:pom:3.0.0 in nexus3 (http://localhost:8091/repository/maven-public/)
</syntaxhighlight>
: Maven 配置的镜像为:本机搭建的 Nexus3(http://localhost:8091/repository/maven-public/)
 
'''解决:'''
: 原因可能是:
# Nexus3 未启动;
# Nexus3 不能连接到代理仓库(此时代理仓库状态为“???”);
#: 大概就是不能通过“127.0.0.1:10800”连接到远程仓库,之前为 Nexus3 设置了 代理,现在代理失效导致。
# Nexus3 未更新远程索引(此时代理仓库状态为“Online - Ready to Connect”);


解决:
  总之,保证 Nexus3 启动,且代理仓库的状态为“<span style="color: blue">'''Online - Remote Available'''</span>”则可正常使用,再有异常可能是网络状况不好。
:“<code>Ctrl + Alt</code> + <code>S</code>”->  ... ->“Maven”->“importing”:在“VM options for importer”项,添加:
: <syntaxhighlight lang="xml">-Xmx4096M</syntaxhighlight>
: [[File:IDEA:Maven运行Clean错误:解决.png|600px]]

2022年12月15日 (四) 01:17的最新版本


关于:一点疑惑

当前 IDEA 版本:2022.1

IDEA 本地 Maven 索引文件夹:“C:\Users\eijux\AppData\Local\JetBrains\IntelliJIdea2022.1\Maven\Indices”

关于:相关插件

Maven 相关的插件主要有三个(默认已绑定):

  1. Maven:提供 Maven 支持。
    • “Maven 项目工具窗口”;
    • 专用模块类型;
    • Maven 仓库支持
    • pom.xml 文件完全编辑支持
    • 导入 Maven 方法支持;
    • 运行和调试 Maven 目标;
    • 编译;
    IDEA:插件:Maven.png
  2. Maven Extension:提供 Web,JavaEE 和依赖分析图表的 Maven 支持。
    • 在“Maven 项目工具窗口”的上下文菜单显示依赖命令;
    • WAR 包;
    • InterlliJ Pofiler对Maven运行配置的支持;
    IDEA:插件:Maven Extension.png
  3. Package Search:查找并管理 JVM 和 Kotlin 多平台项目依赖。
    • 支持 Maven 和 Gradle 项目;
    IDEA:插件:Package Search.png

关于:“远程仓库”和“更新远程仓库索引”

远程仓库(settings.xml),主要是用于:1、“解析依赖(下载依赖项)”,2、“更新远程仓库索引”。


“更新远程仓库索引”用于:在“无网络”的情况下,提供“依赖提示”。 

【参考:https://www.jetbrains.com/help/idea/maven-repositories.html

不同的仓库:

  1. Central:
    • “更新远程仓库索引”:较慢;
  2. AliMaven:
    • “更新远程仓库索引”:不支持
  3. Nexus2(本地):
    • “更新远程仓库索引”:更新后无错误,但是 IDEA 本地 Maven 索引文件夹大小没有变化,不知道原因。
  4. 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

使用:

  1. 通过网络搜索:(未更新索引)。
    • 提示内容可能不完全、多次搜索提示内容不一样(猜测是网络原因);
    • 如果没有默认提示,按下 Ctrl + ,,可以强制搜索提示;
  2. 通过索引搜索:(已更新索引)。
    • 默认即提示在索引中搜索到的所有内容;
  • 重复按下 Ctrl + , 之后,搜索并显示更多:
    • (扩大搜索范围:包、类、接口、枚举)
    • (扩大搜索方式:关键字拆分)

依赖搜索

在 pom.xml 中,生成“添加依赖项”后,“依赖项窗口”的搜索框。【需要插件“Package Search”的支持】

必须在:“有网络”的情况下使用。

【参考:https://www.jetbrains.com/help/idea/package-search.html#packages_tool_window

使用:

等效于,通过 IDEA 的“package-search”页面 搜索。
  • 没有网络则不能使用;
  • 支持的仓库:
    IDEA:插件:Package Search:支持的仓库.png

Maven 设置及说明

在 IDEA 中使用 Maven 前需要进行设置,以避免使用过程中的一些问题。


默认的 Maven 配置:
1、Maven 主路径:已捆绑(Maven3)   ——【IDEA 自带的 Maven】
2、用户设置文件:${user.home}/.m2/settings.xml   ——【默认的配置文件】
3、本地仓库:${user.home}/.m2/settings.xml/repository   ——【默认的本地仓库地址(默认的配置文件中配置)】

步骤:

  1. 打开“系统设置”(Ctrl + Alt + S)的 Maven 页:
  2. 修改以下内容:
    1. Maven 配置
      IDEA:Maven 设置.png
    2. 设置原型目录”:“-DarchetypeCatalog=internal”
      • 位于:“运行程序(Runner)”->“VM 选项(VM Options)”
    3. 忽略 SSL 证书验证”:“-Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true”
      • 位于:“正在导入(Importing)”->“VM 选项(VM Options)”

说明:“设置原型目录”

由于:每次创建 Maven 项目都会从远程仓库(Central)下载原型目录(archetype)。
 
于此,可以使用此配置,用于加速 Maven 项目创建
IDEA:Maven设置:设置原型目录.png

说明:“忽略 SSL 证书验证”

对于:使用某些“不支持 http 下载,只支持 https”的远程仓库(如:阿里云),可以使用此配置。
IDEA:Maven 设置:忽略 SSL 证书验证.png

关于“新项目设置”

如果不修改“新项目设置”下的 Maven 相关项,那么每次在创建 Maven 项目时都会去采用“系统默认”的 Maven 配置,而非“全局配置”的 Maven 配置。

步骤:

  1. 打开“新项目设置”(“文件”->“新项目设置”->“新项目的设置”)的 Maven 页;
    IDEA:新项目设置.png
  2. 修改内容:(参照本节头)

更新远程仓库索引

为 Maven 配置了 setting.xml 之后:

1、仓库显示的远程仓库地址是实际使用的 URL(如果被设置了镜像,就是镜像的地址)。

2、更新仓库索引可能失败,有以下两种情况。
IDEA:Maven更新仓库索引.png

更新失败:网络问题

错误信息:“Cannot connect to the Maven process. Try again later. If the problem presists, check the Maven Importing JDK settings and restart Intelli IDEA”。

由于网络原因,无法连接到该远程仓库。

解决

  1. 方式一:使用国内仓库或镜像。
    如:https://repo1.maven.org/maven2/https://repo2.maven.org/maven2/,不稳定但能用;
  2. 方式二:设置代理:
    Ctrl + Alt + S”-> ... ->“Maven”->“importing”:在“VM options for importer”项,添加:
    -DproxySet=true -DproxyHost=127.0.0.1 -DproxyPort=10800
    
    Idea:为 Maven-importing 设置代理
    • 如果使用 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
见:Maven:settings.xml示例#示例二:使用_nexus2/3

二、利用本地 Web 服务作为索引下载服务器

步骤:

1、下载两个文件:nexus-maven-repository-index.propertiesnexus-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 索引)

方法一:通过“依赖项模板”

IDEA:添加依赖项 2.png

步骤:

  1. 打开“pom.xml”文件;
  2. 使用 Alt + Insert,并选择“依赖项模板”;
  3. 在模板中分别输入相关内容;【有代码提示,但较慢】
  4. 加载 Maven 变更;

方法二:通过“依赖搜索窗口”

IDEA:添加依赖项.png

步骤:

  1. 打开“pom.xml”文件;
  2. 使用 Alt + Insert,并选择“添加依赖项”;
  3. 在“依赖项窗口”:
    1. 上侧:搜索栏,输入关键字;
    2. 左侧:结果列表,点击依赖,并选择版本;
    3. 右侧:显示软件包详情(包括:仓库、项目站点、文档、自述文件等);
    4. 点击“添加”;
  4. 加载 Maven 变更;

修改依赖项版本(升级)

IDEA:设置依赖项版本.png

步骤:

  1. 在“依赖项窗口”:选择需要修改的依赖项的版本;
  2. 加载 Maven 变更;

使用:创建 Maven 项目

创建 Maven 项目,即:从 Archetype (原型、模板)创建一个 Maven 项目。

开发人员可以在此基础上进行扩展开发。



关于“-DarchetypeCatalog”参数

IDEA 创建 Maven 项目的实质:根据 maven archetype(原型)的配置,执行 mvn archetype:generate 命令。

该命令执行时,需要指定一个“archetype-catalog.xml”文件(约为 12 M)。

参数“-DarchetypeCatalog”,用于指定“archetype-catalog.xml”文件的获取方式:

  1. remote:,即,从“远程”获取;——【即:“中央仓库”的“http://repo1.maven.org/maven2/archetype-catalog.xml”路径】
    • (默认)
    • 下载速度很慢,容易导致创建过程卡住。
  2. internal:从“内部”获取;——【即:“maven-archetype-plugin”内置的 archetypeCatalog 文件】
    • (建议)
  3. local:即,从“本地”获取;——【即:设置的本地仓库中】
    • 需要保存“archetype-catalog.xml”文件,至本地(“${localRepository})\org\apache\maven\archetypes\archetype-catalog\<版本>”)。
  4. 使用“在 IDEA 中添加的指定路径”:
    IDEA:Maven 设置:Archetype目录.png
    • 需要保存“archetype-catalog.xml”文件,至该路径。
下载“archetype-catalog.xml”(右键保存)

FAQ

为什么“${user.home}/.m2/repository”中有下载内容?


即使在 IDEA 全局配置中修改了 Maven 配置文件地址,即使 settings.xml 中指定本地仓库到了其他位置。

在“${user.home}/.m2/repository”下依然会时不时有新下载的依赖包。

可能是因为:

  1. 系统设置中:
    • 仍然使用 IDEA 中默认绑定的“Bundled(Maven 3)”;
    • 依然使用默认的 Maven 配置(配置文件“${user.home}/.m2/settings.xml”),指定的仓库地址为“${user.home}/.m2/repository”;
    • 使用的“settings.xml”中设置的本地仓库为“${user.home}/.m2/repository”;
  2. 新项目设置中:
    • 仍然使用 IDEA 中默认绑定的“Bundled(Maven 3)”;
    • 依然使用默认的 Maven 配置(配置文件“${user.home}/.m2/settings.xml”),指定的仓库地址为“${user.home}/.m2/repository”;
    • 使用的“settings.xml”中设置的本地仓库为“${user.home}/.m2/repository”;
  3. 通过 IDEA 下载的依赖项,默认地址即为“${user.home}/.m2/repository”;
    IDEA:通过IDEA添加依赖项(不使用Maven).png
通过 IDEA 和 Maven 添加的依赖项,对比:
 IDEA:通过IDEA和Maven管理的依赖项.png

错误:Clean 等命令运行错误


描述:双击“Mavne 项目工具窗口”的 Clean 等命令时,收到错误信息:

Error occurred during initialization of VM 
    Unable to allocate 130176KB bitmaps for parallel garbage collection for the requested 4165632KB heap.
IDEA:Maven运行Clean错误.png

解决:在“VM options for importer”中,添加:-Xmx4096M

设置位置:“Ctrl + Alt + S”-> ... ->“Maven”->“importing”;
IDEA:Maven运行Clean错误:解决.png

错误:“Maven Projects Tool Window”的红线提示


描述:在“Maven 项目工具窗口”的依赖项中,部分依赖下有红线提示,但问题窗口并没有关于项目的任何错误信息。

IDEA:Maven窗口的红线.png

解决:在 pom.xml 文件中:

  1. 剪掉对应依赖,加载 maven 变更;
  2. 贴上对应依赖,加载 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/)

解决:

原因可能是:
  1. Nexus3 未启动;
  2. Nexus3 不能连接到代理仓库(此时代理仓库状态为“???”);
    大概就是不能通过“127.0.0.1:10800”连接到远程仓库,之前为 Nexus3 设置了 代理,现在代理失效导致。
  3. Nexus3 未更新远程索引(此时代理仓库状态为“Online - Ready to Connect”);
总之,保证 Nexus3 启动,且代理仓库的状态为“Online - Remote Available”则可正常使用,再有异常可能是网络状况不好。