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

来自Wikioe
跳到导航 跳到搜索
第241行: 第241行:
# 贴上对应依赖,加载 maven 变更;
# 贴上对应依赖,加载 maven 变更;


=== Maven 的 Clean 命令运行错误 ===
=== Maven 错误:Clean 命令运行错误 ===
双击 Mavne 窗口的 Clean 等命令时,收到错误信息:
'''错误:'''双击“Mavne 项目工具窗口”的 Clean 等命令时,收到错误信息:
    Error occurred during initialization of VM  
: <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]]


解决:
 
:<code>Ctrl + Alt</code> + <code>S</code>”->  ...  ->“Maven”->“importing”:在“VM options for importer”项,添加:
'''解决:'''在“VM options for importer”中,添加:<span style="color: blue">-Xmx4096M</span>
: <syntaxhighlight lang="xml">-Xmx4096M</syntaxhighlight>
: 设置位置:“<code>Ctrl + Alt</code> + <code>S</code>”->  ...  ->“Maven”->“importing”;
: [[File:IDEA:Maven运行Clean错误:解决.png|600px]]
: [[File:IDEA:Maven运行Clean错误:解决.png|600px]]
=== 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>

2022年5月13日 (五) 20:33的版本


关于:一点疑惑

当前 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、“更新远程仓库索引”。

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

不同的仓库:

  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、“已更新远程仓库索引”的情况下使用。(二者都没有时,由于缓存可以显示部分内容)

使用:

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

依赖搜索

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

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

使用:

等效于,通过 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 仓库;

另一个思路:使用 Nexus 私服

针对于以上两个问题:
   1、国外仓库支持索引,但网络不稳定;
   2、国内仓库网络稳定,但不支持索引。

除了使用代理,还有另一种思路:使用 nexus 建立 Maven 私服。


    用私服代理远程仓库,只要保证本地到私服的网络畅通即可。(如果是在本地搭建私服,则同样需要解决私服到远程仓库的网络问题)


参考:
   1、“利用nexus私服,解决IDEA无法下载maven仓库索引文件的终极解决方案”
   2、“IDEA Maven Repositiory Index 错误/ resource nexus-maven-repository-index.properties does not exist

见:Maven:settings.xml示例#示例二:使用_nexus2/3

使用:为项目添加依赖项

一般可以通过 mvnrepository 网站 搜索软件包的依赖配置信息,然后直接复制到项目的“pom.xml”文件中。

如果要通过 IDEA 添加依赖项,有以下两种方式。(需要 IDEA 的 Maven 索引)

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

IDEA:添加依赖项.png

步骤:

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

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

IDEA:添加依赖项 2.png

步骤:

  1. 打开“pom.xml”文件;
  2. 使用 Alt + Insert,并选择“依赖项模板”;
  3. 在模板中分别输入相关内容;【有代码提示,但较慢】
  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 的新项目设置,依然使用“系统默认”的 Maven 配置(配置文件“${user.home}/.m2/settings.xml”),而非“全局配置”的 Maven 配置;
  2. “${user.home}/.m2/settings.xml”中设置的本地仓库为“${user.home}/.m2/repository”。

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

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

解决,在 pom.xml 文件中:

  1. 剪掉对应依赖,加载 maven 变更;
  2. 贴上对应依赖,加载 maven 变更;

Maven 错误: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 错误:“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>
    
    ...