IntelliJ';s";重新导入所有Maven项目”;按钮工作?

IntelliJ';s";重新导入所有Maven项目”;按钮工作?,maven,intellij-idea,intellij-13,intellij-14,Maven,Intellij Idea,Intellij 13,Intellij 14,IntelliJ的“重新导入所有Maven项目”按钮实际上是如何工作的 我问这个问题是因为我看到IntelliJ的重新导入按钮的行为与使用-U参数运行mvn命令的行为不同,我不清楚原因。如果更改了pom.xml文件,IDEA需要更新项目结构。 例如,如果您添加了更多的依赖项,IDEA需要将它们添加为项目库 所以“Maven>Reimport”就是用来重新导入Maven模块的。它不会使用任何参数触发任何maven命令 “全部重新导入”的操作与此相同,但适用于项目中的所有maven模块 作为旁注,在

IntelliJ的“重新导入所有Maven项目”按钮实际上是如何工作的


我问这个问题是因为我看到IntelliJ的重新导入按钮的行为与使用
-U
参数运行
mvn
命令的行为不同,我不清楚原因。

如果更改了pom.xml文件,IDEA需要更新项目结构。 例如,如果您添加了更多的依赖项,IDEA需要将它们添加为项目库

所以“Maven>Reimport”就是用来重新导入Maven模块的。它不会使用任何参数触发任何maven命令

“全部重新导入”的操作与此相同,但适用于项目中的所有maven模块


作为旁注,在“设置>构建、执行、部署>构建工具>Maven>导入”中,您可以选择“自动导入Maven项目”,而不是使用这两个操作。当pom.xml被更改时,这将自动调用“重新导入”操作。

我认为您错过了本地和远程存储库部分

如果您运行
mvn-U
,它将强制maven从远程存储库下载所有库,这些库将是您公司的nexus或maven repo。
-U
与未使用的主要区别在于
-U
将用远程快照jar覆盖本地快照jar。本地快照jar来自install,远程快照jar来自deploy命令

重新进口会带来混乱重新导入将加载本地jar而不是远程jar,尤其是快照jar。您可以在maven菜单中启用强制更新快照,这将在intellij中启用
-U
开关

还要再次检查您是否与system 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刷新自己的缓存,,这就是行为上存在差异的原因。

谢谢,这一部分我其实很清楚。该部分是我不清楚的部分,例如:在projectA pom.xml中,我们在projectB中有依赖项,当单击“重新导入所有”按钮时(我们在projectA中工作),也会更新依赖项文件。但是,有时不是。为什么会这样?你有没有找到这个@StasS的答案?我也很好奇。还在看@monar,也许赏金会有帮助:)谢谢。您确定“重新导入将加载本地jar而不是远程jar”部分吗?我认为安装目标负责将工件添加到本地存储库中。安装目标将JAR添加到本地存储库中,如果提供了,则部署将JAR添加到远程repo中。嗯,但我们谈论的是罐子的进口或装载。默认策略是1。调查本地回购协议,如果缺失2。研究远程回购3。下载到本地回购协议。第一次导入会触及所有三个障碍,但第二次导入只会触及第一个阶段,因为JAR已经在本地回购中降级。使用-U标志跳过第一步。如果IntelliJ未选中该标志(默认为未选中),则在重新导入或从mvn面板运行的任何mvn命令中不使用-U标志。谢谢您的回答。我有一个问题:假设我有一个依赖于X的项目Y。我首先对X进行更改。然后,我可以做
cdy;mvn clean install-U
在终端中成功安装;在终端上构建成功;但我仍然看到intellij中缺少的符号,除非我按下重新导入按钮。在这种情况下有什么好处?“重新导入”按钮是否连接到Intellij的缓存系统?答案并没有完全解释这种行为,但引导我走上了正确的道路。我将奖励这个答案,但我已经添加了我自己的观察结果(有待同行审查),感谢米兰巴兰和莫纳尔,这确实有帮助