为啥刷新 Maven 存储库对于 IntelliJ 来说还不够?

Posted

技术标签:

【中文标题】为啥刷新 Maven 存储库对于 IntelliJ 来说还不够?【英文标题】:Why refresh of Maven repository is not enough for IntelliJ?为什么刷新 Maven 存储库对于 IntelliJ 来说还不够? 【发布时间】:2021-02-24 10:14:57 【问题描述】:

我在一些测试中遇到了 NoClassDefFoundError 问题,从 IntelliJ 启动。为了修复这种情况,我不得不在项目的许多 pom 中进行一些更改 - 添加新包并排除一些旧包以避免它们的重叠。另外,我用不同的版本恢复了这种情况。但情况并没有好转。再一次,在 pom 中声明的某些包没有找到它应该在的位置。

我通过

刷新了maven仓库
mvn -e clean install -U

,正如https://***.com/a/9697970/715269 中所建议的那样 - 如此古老且被赞成的答案,它肯定看起来像圣诞老人。

问题没有改变。

我输出了 maven 地图。它是正确的,它包含了所有需要的东西。

我查看了该项目的External Libraries 列表。这是旧的未更正的重叠 jar 列表,具有相同的名称和不同的版本,并且没有我刚才添加的好包,并且在 maven 树输出中很明显!

已经倒霉了,

我在 IntelliJ 中重新导入了包

经过:
Ctrl+Shift+A, Reimport All Maven Projects.

喂!库列表已修复。而在 subj 中提到的问题就消失了。

问题是:它怎么可能发生,同一个项目对所有东西都有那么大的 pom,但是在 maven 和 IntelliJ 中以不同的方式启动包?

我知道“将 IDE 构建委托给 Maven”这一功能。我一直把它关掉。但我不是在谈论用于构建的不同软件。无论它们是否不同,它们都应该取决于实际的 pom。虽然 maven,如果从自动构建中关闭,则不会知道 pom 的变化,而 IntelliJ 知道它们。它可以有 pom 或 maven 的罐子——它有道理,但它只是有一些旧垃圾。在这种结构下是否有一些深刻的思考?

【问题讨论】:

【参考方案1】:

每次您手动更改pom.xml 文件时,包括您需要将这些更改加载到IDE 中的依赖项。 IDE 在Reload from Maven 操作上执行此操作。另见Import Maven dependencies。

【讨论】:

不是重新加载,而是重新导入,如我所见。【参考方案2】:

Intellij 不使用 maven 来构建和运行项目,除非您将构建和运行操作委托给 maven:

由于 IDEA 并没有真正使用 maven 来运行和构建,它使用 pom.xml 导入项目结构并“尝试”以与 maven 相同的方式构建项目。

实际上,这些构建过程之间存在相当多的差异。 在使用 Intellij IDEA 构建项目期间,没有生成源或过滤资源(不知道这是否仍然是一个问题)。

如果您使用代码生成,您必须首先通过 maven 构建项目,然后 - 当所有资源都被过滤并生成其他源时 - 您可以运行、调试 aso。与 Inellij IDEA 合作的项目。

这是需要注意的重要事项,这也是 maven 和 IntelliJ IDEA 项目结构可能不同步的原因。

您可以启用“在构建脚本更改后重新加载项目”功能并选中Any changes 复选框以保持您的项目结构更新:

为什么要禁用此功能

如果您正在处理构建文件(gradle 或 maven 不重要),则在任何更改时重新加载结构都可能非常烦人。它是 cpu 密集型的,依赖项也是如此。

因此,我更喜欢仅在外部更改的情况下重新加载项目结构。例如,在拉取构建文件的更新版本时会发生这种情况。

【讨论】:

谢谢,我知道“将 IDE 构建委托给 Maven”这一功能。我一直把它关掉。但我不是在谈论不同的建筑软件。无论它们是否不同,它们都应该取决于实际的 pom。虽然 maven,如果从自动构建中关闭,则不会知道 poms 的变化,而 IntelliJ 知道它们。它可能有 pom 或 maven 的罐子——它有道理,但它只是有一些旧垃圾。 抱歉不清楚。我想激发 maven pom descriptior 和 IDEA 类路径/构建过程之间构建/类路径漂移的原因。但是,是的,我同意。这是我不喜欢 IDEA 的地方之一。没有工具是完美的。 所以,你认为,独立的外部库对 IntelliJ 的 repo 不是明智和必要的,因为我不知道,原因,但它只是组织得远远不是最好的方式并按原样存在?

以上是关于为啥刷新 Maven 存储库对于 IntelliJ 来说还不够?的主要内容,如果未能解决你的问题,请参考以下文章

IntelliJ IDEA:“Indexed Maven Repositories”列表 - 如何删除此列表中的远程 maven 存储库?

如何强制 IntelliJ 中的 Maven 从本地 .m2 存储库中提取特定依赖项

IntelliJ IDEA导入Maven之后强制刷新项目解决无法识别为Maven项目的问题

Intellij 无法连接到本地 m2 存储库

为啥 IntelliJ 中的一些 maven 项目是灰色的?

为啥 Intellij 在 pom.xml 中找不到任何 Maven 依赖项?