IntelliJ 的 "Reimport All Maven Projects" 按钮如何工作?
How does IntelliJ's "Reimport All Maven Projects" button work?
IntelliJ 的 "Reimport All Maven Projects" 按钮实际上是如何工作的?
我问这个是因为我看到 IntelliJ 的重新导入按钮的行为 不同于 运行 mvn
命令和 [=12] =] 争论,我不清楚为什么。
如果更改了pom.xml文件,IDEA需要更新项目结构。
例如,如果您在那里添加了更多依赖项,IDEA 需要将它们添加为项目库。
所以 "Maven > Reimport" 完全用于 - 重新导入 Maven 模块。它不会触发任何带有任何参数的 Maven 命令。
"Reimport All" 对项目中的所有 maven 模块执行相同的操作。
附带说明一下,在 "Settings > Build, Execution, Deployment > Build Tools > Maven > Importing" 中,您可以选择 "Import Maven projects automatically" 而不是使用这两个操作。这将在 pom.xml 更改时自动调用 "Reimport" 操作。
我想你错过了本地和远程存储库的部分。
如果你 运行 mvn -U
它会强制 maven 从远程存储库下载所有库,这些库将成为你的公司 nexus 或 maven 存储库。使用 -U
和不使用 -U
的主要区别在于 -U
将使用远程 SNAPSHOT jar 覆盖本地 SNAPSHOT jar。本地 SNAPSHOT jar 来自安装,远程来自部署命令。
重新导入会造成混淆。 Reimport 将加载您的本地 jar 而不是远程 jar,尤其是 SNAPSHOT 的。您可以在 maven 菜单中启用强制更新快照,这将在 intellij 中启用 -U
开关。
还要仔细检查您是否与系统 maven 和 intellij maven 共享相同的 .m2 目录。您可以在用户设置文件中看到它并将其与命令行 maven 进行比较。只需 运行 mvn -X
并检查设置部分。
[DEBUG] Reading global settings from /usr/local/Cellar/maven/3.3.9/libexec/conf/settings.xml
[DEBUG] Reading user settings from /Users/xbaran/.m2/settings.xml
[DEBUG] Reading global toolchains from /usr/local/Cellar/maven/3.3.9/libexec/conf/toolchains.xml
[DEBUG] Reading user toolchains from /Users/xbaran/.m2/toolchains.xml
[DEBUG] Using local repository at /Users/xbaran/.m2/repository
给未来读者的提问者注释
这个答案没有完全解释重新导入按钮的行为,所以我将在这里添加我的观察以供后代使用。
IntelliJ 的缓存(即 .idea 文件夹)似乎有问题。在终端中使用 mvn clean install -U
按此处所述工作,但不影响 IntelliJ IDE;缺失符号仍被描述为缺失。但是,如果我按下“神奇的重新导入按钮”,那些缺失的符号就会成功解析。
我只能假设重新导入按钮基本上是在指示 IntelliJ 刷新它自己的缓存,这就是行为不同的原因。
IntelliJ 的 "Reimport All Maven Projects" 按钮实际上是如何工作的?
我问这个是因为我看到 IntelliJ 的重新导入按钮的行为 不同于 运行 mvn
命令和 [=12] =] 争论,我不清楚为什么。
如果更改了pom.xml文件,IDEA需要更新项目结构。 例如,如果您在那里添加了更多依赖项,IDEA 需要将它们添加为项目库。
所以 "Maven > Reimport" 完全用于 - 重新导入 Maven 模块。它不会触发任何带有任何参数的 Maven 命令。
"Reimport All" 对项目中的所有 maven 模块执行相同的操作。
附带说明一下,在 "Settings > Build, Execution, Deployment > Build Tools > Maven > Importing" 中,您可以选择 "Import Maven projects automatically" 而不是使用这两个操作。这将在 pom.xml 更改时自动调用 "Reimport" 操作。
我想你错过了本地和远程存储库的部分。
如果你 运行 mvn -U
它会强制 maven 从远程存储库下载所有库,这些库将成为你的公司 nexus 或 maven 存储库。使用 -U
和不使用 -U
的主要区别在于 -U
将使用远程 SNAPSHOT jar 覆盖本地 SNAPSHOT jar。本地 SNAPSHOT jar 来自安装,远程来自部署命令。
重新导入会造成混淆。 Reimport 将加载您的本地 jar 而不是远程 jar,尤其是 SNAPSHOT 的。您可以在 maven 菜单中启用强制更新快照,这将在 intellij 中启用 -U
开关。
还要仔细检查您是否与系统 maven 和 intellij maven 共享相同的 .m2 目录。您可以在用户设置文件中看到它并将其与命令行 maven 进行比较。只需 运行 mvn -X
并检查设置部分。
[DEBUG] Reading global settings from /usr/local/Cellar/maven/3.3.9/libexec/conf/settings.xml
[DEBUG] Reading user settings from /Users/xbaran/.m2/settings.xml
[DEBUG] Reading global toolchains from /usr/local/Cellar/maven/3.3.9/libexec/conf/toolchains.xml
[DEBUG] Reading user toolchains from /Users/xbaran/.m2/toolchains.xml
[DEBUG] Using local repository at /Users/xbaran/.m2/repository
给未来读者的提问者注释
这个答案没有完全解释重新导入按钮的行为,所以我将在这里添加我的观察以供后代使用。
IntelliJ 的缓存(即 .idea 文件夹)似乎有问题。在终端中使用 mvn clean install -U
按此处所述工作,但不影响 IntelliJ IDE;缺失符号仍被描述为缺失。但是,如果我按下“神奇的重新导入按钮”,那些缺失的符号就会成功解析。
我只能假设重新导入按钮基本上是在指示 IntelliJ 刷新它自己的缓存,这就是行为不同的原因。