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

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


== 关于 ==
== 关于:一点疑惑 ==
当前 IDEA 版本:2022.1
IDEA 本地 Maven 索引文件夹:“C:\Users\eijux\AppData\Local\JetBrains\IntelliJIdea2022.1\Maven\Indices”
 
=== 关于:相关插件 ===
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、“'''更新远程仓库索引'''”。
<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]】


不同的仓库:
# Central:
#*“更新远程仓库索引”:较慢;
# AliMaven:
#*“更新远程仓库索引”:'''不支持''';
# Nexus2(本地):
#*“更新远程仓库索引”:更新后无错误,但是 IDEA 本地 Maven 索引文件夹大小没有变化,不知道原因。
# Nexus3(本地):
#*“更新远程仓库索引”:下载过程(450 M 左右)很快,但是'''索引处理'''(Processing indices)过程较长(大概五分钟),过程结束可以找到新的索引文件夹(780 M 左右);


=== 关于不同的远程仓库 ===
关于使用 Nexus:
通过测试:
1、Nexus2、Nexus3 可能需要设置代理保证到 Central 的网络。
# AliMaven
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 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'''”的支持】
必须在:“'''有网络'''”的情况下使用。
【参考:[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> 搜索。
* 没有网络则不能使用;
* 支持的仓库:
*: [[File:IDEA:插件:Package Search:支持的仓库.png|600px]]
== Maven 设置及说明 ==
在 IDEA 中使用 Maven 前需要进行设置,以避免使用过程中的一些问题。
默认的 Maven 配置:
1、Maven 主路径:已捆绑(Maven3)  ——【IDEA 自带的 Maven】
2、用户设置文件:${user.home}/.m2/settings.xml  ——【默认的配置文件】
3、本地仓库:${user.home}/.m2/settings.xml/repository  ——【默认的本地仓库地址(默认的配置文件中配置)】
步骤:
# 打开“系统设置”('''<code>Ctrl + Alt</code> + <code>S</code>''')的 Maven 页:
# 修改以下内容:
## '''Maven 配置''':
##: [[File:IDEA:Maven 设置.png|600px]]
##“'''设置原型目录'''”:<span style="color: blue">“-DarchetypeCatalog=internal”</span>
##* 位于:“运行程序(Runner)”->“VM 选项(VM Options)”
##“'''忽略 SSL 证书验证'''”:<span style="color: blue">“-Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true”</span>
##* 位于:“正在导入(Importing)”->“VM 选项(VM Options)”
=== 说明:“设置原型目录” ===
由于:每次创建 Maven 项目都会从远程仓库(Central)下载原型目录(archetype)。
 
于此,可以使用此配置,用于'''加速 Maven 项目创建'''。
: [[File:IDEA:Maven设置:设置原型目录.png|600px]]
=== 说明:“忽略 SSL 证书验证” ===
对于:使用某些“'''不支持 http 下载,只支持 https'''”的远程仓库(如:阿里云),可以使用此配置。
: [[File:IDEA:Maven 设置:忽略 SSL 证书验证.png|600px]]
=== 关于“新项目设置” ===
如果不修改“新项目设置”下的 Maven 相关项,那么每次在创建 Maven 项目时都会去采用“系统默认”的 Maven 配置,而非“全局配置”的 Maven 配置。
步骤:
# 打开“新项目设置”(“文件”->“新项目设置”->“新项目的设置”)的 Maven 页;
#: [[File:IDEA:新项目设置.png|300px]]
# 修改内容:(参照本节头)


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


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


=== 更新失败:网络问题 ===
=== 更新失败:网络问题 ===
第38行: 第147行:
  错误信息:“'''Repository is non-nexus repo, or is not indexed'''”。
  错误信息:“'''Repository is non-nexus repo, or is not indexed'''”。
   
   
  配置的远程仓库不支持索引。
  配置的远程仓库不支持索引。(如:阿里云)


'''解决''':使用支持索引的 Maven 仓库;
'''解决''':使用支持索引的 Maven 仓库;




'''P.S.:'''
=== 其他思路: ===
1、阿里云等Maven仓库“[https://developer.aliyun.com/article/621196 目前还未支持生成和下载 maven indexer 文件]”
2、阿里云 Maven 仓库:“'''阿里不再支持 http 下载,只支持 https'''”。
    需要对 Maven->importing(VM options for importer)设置“'''忽略ssl证书的验证'''”:'''“<syntaxhighlight lang="xml" inline>-Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true</syntaxhighlight>”''';
阿里云Maven 使用指南:[[https://developer.aliyun.com/mvn/guide [https://developer.aliyun.com/mvn/guide]]
 
=== P.S.:使用 Nexus 私服 ===
  针对于以上两个问题:
  针对于以上两个问题:
     1、国外仓库支持索引,但网络不稳定;
     1、国外仓库支持索引,但网络不稳定;
     2、国内仓库网络稳定,但不支持索引。
     2、国内仓库网络稳定,但不支持索引。
   
   
  除了使用代理,还有另一种思路:'''使用 nexus 建立 Maven 私服'''。
  除了使用代理,还有其他思路。
 
==== 一、使用 Nexus 私服 ====
用私服代理远程仓库,需要:
1、保证本地到私服的网络;
   
   
2、保证私服到被代理仓库的网络;(问题一)
   
   
    用私服代理远程仓库,只要保证本地到私服的网络畅通即可。(如果是在本地搭建私服,则同样需要解决私服到远程仓库的网络问题)
3、保证被代理的仓库支持索引;(问题二)
【其实就是转移问题了】
   
   
   
   
第68行: 第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索引实现自动补全]
 
== 使用:为项目添加依赖项 ==
  一般可以通过 <span style="font-size: 18px">'''[https://mvnrepository.com/ mvnrepository 网站]'''</span> 搜索软件包的依赖配置信息,然后直接复制到项目的“pom.xml”文件中。
  一般可以通过 <span style="font-size: 18px">'''[https://mvnrepository.com/ mvnrepository 网站]'''</span> 搜索软件包的依赖配置信息,然后直接复制到项目的“pom.xml”文件中。
   
   
  如果要通过 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]]


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


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


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


== 设置“从本地缓存中获取配置信息” ==
== 使用:创建 Maven 项目 ==
  创建 Maven 项目时,有一些模板信息默认从远程仓库下载获取,在网络状况不太好时,较为不便。
创建 Maven 项目,即:从 '''Archetype''' (原型、模板)创建一个 Maven 项目。
开发人员可以在此基础上进行扩展开发。
 
 
 
 
 
=== 关于“-DarchetypeCatalog”参数 ===
  IDEA 创建 Maven 项目的实质:根据 maven '''archetype'''(原型)的配置,执行 '''<syntaxhighlight lang="bash" inline>mvn archetype:generate</syntaxhighlight>''' 命令。
该命令执行时,需要指定一个“'''archetype-catalog.xml'''”文件(约为 12 M)。
 
参数“<span style="color: blue">'''-DarchetypeCatalog'''</span>”,用于指定“archetype-catalog.xml”文件的获取方式:
# '''remote''':,即,从“'''远程'''”获取;——【即:“中央仓库”的“[http://repo1.maven.org/maven2/archetype-catalog.xml 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 中添加的指定路径”:
#: [[File:IDEA:Maven 设置:Archetype目录.png|600px]]
#* 需要保存“archetype-catalog.xml”文件,至该路径。


使用“<span style="color: blue">-DarchetypeCatalog=internal</span>”(用于设置从本地缓存中获取配置信息):
<big>'''[https://repo1.maven.org/maven2/archetype-catalog.xml 下载“archetype-catalog.xml”]'''</big>(右键保存)
* 如果设置了这个参数:第一次从远程拿,以后从本地拿。【要求第一次使用 Maven 必须联网】
: [[File:IDEA:设置Maven:跳过模板下载.png|600px]]


== FAQ ==
== FAQ ==
=== Maven窗口的红线提示 ===
=== 为什么“${user.home}/.m2/repository”中有下载内容? ===
  Maven 窗口的依赖项中,部分依赖下有红线提示,但问题窗口并没有关于项目的任何错误信息。
----
: [[File:IDEA:Maven窗口的红线.png|600px]]
  即使在 IDEA 全局配置中修改了 Maven 配置文件地址,即使 settings.xml 中指定本地仓库到了其他位置。
在“${user.home}/.m2/repository”下依然会时不时有新下载的依赖包。


解决,在 pom.xml 文件中:
可能是因为:
# 剪掉对应依赖,加载 maven 变更;
# 系统设置中:
# 贴上对应依赖,加载 maven 变更;
#* 仍然使用 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]]
 
通过 IDEA 和 Maven 添加的依赖项,对比:
  [[File:IDEA:通过IDEA和Maven管理的依赖项.png|600px]]


=== Maven 的 Clean 命令运行错误 ===
=== 错误:Clean 等命令运行错误 ===
双击 Mavne 窗口的 Clean 等命令时,收到错误信息:
----
    Error occurred during initialization of VM  
'''描述:'''双击“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.
     Unable to allocate 130176KB bitmaps for parallel garbage collection for the requested 4165632KB heap.
</syntaxhighlight>
: [[File:IDEA:Maven运行Clean错误.png|600px]]
: [[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”:在“VM options for importer”项,添加:
: 设置位置:“<code>Ctrl + Alt</code> + <code>S</code>”->  ...  ->“Maven”->“importing”;
: <syntaxhighlight lang="xml">-Xmx4096M</syntaxhighlight>
: [[File:IDEA:Maven运行Clean错误:解决.png|600px]]
: [[File:IDEA:Maven运行Clean错误:解决.png|600px]]
=== 错误:“Maven Projects Tool Window”的红线提示 ===
----
'''描述:'''在“Maven 项目工具窗口”的依赖项中,部分依赖下有红线提示,但问题窗口并没有关于项目的任何错误信息。
: [[File:IDEA:Maven窗口的红线.png|400px]]
'''解决:'''在 pom.xml 文件中:
# 剪掉对应依赖,加载 maven 变更;
# 贴上对应依赖,加载 maven 变更;
=== 错误:“Invalid packaging for parent POM ..., must be "pom" but is "jar"” ===
----
'''描述:'''项目(Project)下存在多个模块(Module),且项目、模块下均存在“pom.xml”时,收到错误信息:
: <syntaxhighlight lang="bash" highlight="">
[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>”则可正常使用,再有异常可能是网络状况不好。

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”则可正常使用,再有异常可能是网络状况不好。