【问题标题】:How does IDEA handle dependencies in maven project?IDEA如何处理maven项目中的依赖关系?
【发布时间】:2017-09-20 22:22:28
【问题描述】:

我有一个大型的多模块 maven 项目。当我在 IDEA 中加载这个项目时,从 nexuses 导入所有依赖项,使 'mvn clean install' 填充本地 repo,对于 maven 来说一切似乎都很好,因为它能够成功解决所有问题。但在 IDEA 中,某些类显示为红色,工具提示“无法解析...”

重要的一点是,一些远程类包被打包到 2 个或多个 jar 中(而不是通常制作的一个),具有相同的 manifest.mf(因此具有相同的工件名称)。它们包含相同的包,但一个保留一半的类,另一个保留最后一个。范围是编译。

这就像我们在包 com.pack1 中有 2 个类 A 和 B,它们被打包到 2 个 jar 中 foo.jar(包含 com.pack1.A.class)和 foo-impl.jar(包含 com .pack1.B.class) 具有相同的清单。

似乎 maven 正确处理了这个问题,但 IDEA 没有:在项目的结构中,只有一个来自 jar-bundle 的 jar 存在(没有其他名称部分的那个,例如 "-impl" 或 “-web”)。所以有些类(来自其余的 jars)是红色的,不能通过 ctrl+LMB 打开或用 ctrl-N 找到。本地 m2 存储库中也只有一个 jar(与 IDEA 的项目设置相同)。

神奇的是,IDEA 仍然可以使用 double-shift 找到丢失的类并按原样打开代码(没有反编译警告)。如果我在编辑器中打开这个类,项目结构面板上的 scroll from source 将不起作用。看起来 IDEA 以某种方式设法将类加载到内存中的类路径,但不知道在文件系统上的哪里可以找到相应的 jar。它确实不存在,因为“本地 m2 仓库中也只有一个罐子”

所以我的问题是怎么可能?以及如何使 IDEA 和 maven 成为朋友,以便它们在处理依赖项时表现相同?
(除了手动将缺少的 jar 添加到项目结构中)

我尝试在右侧 maven 导航栏上重新导入,使 IDEA 的缓存无效,清理本地 m2 存储库,从文件 -> 新建 -> 项目重新导入整个项目从现有来源,在设置 -> 构建、执行、部署 -> 构建工具 -> Maven-> 存储库中更新存储库并使用不同的 maven 版本。

Maven 3.0.4,IDEA 17.1

【问题讨论】:

  • 您是否尝试过使想法无效并清理项目?
  • 试图删除本地m2 repo,并在idea中重新导入项目。认为它与重新创建idea的项目文件具有相同的效果。对吗?
  • Idea 维护自己的缓存。这与 ~/.m2/repository 无关 - 它是纯 mvn。
  • 删除本地.m2文件夹不会删除idea缓存。
  • 如果你展开右边的导航栏,里面有maven,你会看到刷新符号,试试这个也会刷新peroject中的maven依赖

标签: java maven intellij-idea dependencies


【解决方案1】:

首先确保在添加新依赖项后重新导入 maven。或者激活自动导入(右键单击项目 -> Maven -> 重新导入)。

下一篇:Intellij Idea 已经捆绑了 maven。您可以设置默认使用的那个。

转到: 设置 -> 构建、执行、部署 -> 构建工具 -> Maven。

在 Maven 主目录中选择您的 Maven 主文件夹并保存。从现在开始,intellij 将使用与您在系统中相同的 maven。

【讨论】:

  • 我使用独立的 maven(未捆绑),并且正确配置了 idea 的 maven 插件(maven 路径、repo 路径等。)Settings -> Build, Execution, Deployment -> Build 中的存储库工具 -> Maven->存储库 已更新。自动导入已打开。我也尝试手动重新导入
猜你喜欢
  • 2021-10-24
  • 2021-02-21
  • 1970-01-01
  • 1970-01-01
  • 2014-10-22
  • 1970-01-01
  • 2012-12-14
  • 2013-12-21
  • 1970-01-01
相关资源
最近更新 更多