【发布时间】:2016-03-11 02:42:55
【问题描述】:
我们的团队使用 Maven 管理 Java 项目。我们制定了一项政策,即存储库的 master 分支上的所有代码都应该:
- 本身有一个
-SNAPSHOT版本(使用 Maven 发布插件创建发布) - 仅对发行版有 Maven 依赖项,而对
-SNAPSHOTs 没有。
这在 IntelliJ IDEA(版本 15,内部版本 143.1821.5)中产生了不幸的后果。假设 Maven 工件 A 依赖于 Maven 工件 B 的某个发布版本,例如 1.2.3。不过,master 上的 B 的当前代码将类似于 1.2.4-SNAPSHOT。如果我在 IDEA 中同时加载 A 和 B 的源代码,请转到 B 中的一个类,该类在 A 中使用,然后执行 Find Usages(Ctrl 键单击类名或 Alt-7 ),没有找到结果。但是,如果我在 IDE 中导航到 1.2.4 版本的反编译类文件并执行 Find Usages,它会在 A 中找到用法。
我理解为什么会发生这种情况 --- A 确实没有使用 -SNAPSHOT 版本的代码 --- 但是这种程度的挑剔使得 Find Usages 在 Maven 工件中几乎毫无用处。然而,我似乎记得在最近的某个时刻,IDEA 的Find Usages 并不那么挑剔。不幸的是,谷歌搜索没有发现其他人提到这个问题或提到 IDEA 行为的变化,所以现在我们认为我们只是想象以前的行为。
那么,有谁知道在执行Find Usages 时如何让 IDEA 忽略 Maven 模块上的版本不匹配?是否有一些我们之前启用的设置现在找不到了?
【问题讨论】:
-
我不确定 Idea 对此是否“挑剔”,因为它非常受欢迎。我过去有过类似的配置(尽管我通常将 master 保留为唯一的非快照分支,但我经常将依赖项的快照版本加载到 intellij 中)。我要做的第一件事是更改依赖项以引用我已加载的模块的快照版本——因为我希望 Idea 引用编辑器中的代码。为了找到这些,我转到项目视图中“外部库”中的非快照依赖项,并在其中搜索类的用法,然后导航到它们的 pom。
-
@EngineerDollery 这种行为在某些情况下可能是“非常可取的”,但绝对不是。例如,假设我正在开发一个具有库依赖项的主项目,并且我正在对库进行更改。我从 master 创建库的一个分支,然后查看最新的主项目。如果我想快速找到使用特定库类的位置,我现在必须在主项目中进行代码更改(和新的 git 分支)。这并不麻烦,但是当我的工作区中的两个项目随便按 Alt+F7 时,我不会立即想到它。
-
您的示例是不良行为之一。如果您正在使用依赖项管理,那么您“需要”维护一个依赖项列表及其版本。您描述了在组件的新版本上工作,并且为此您“必须”更新您的依赖项列表。你的工作区并没有进入它——它是一个与你的代码无关的心理结构。如果您真的想要那种级别的非正式代码吊索,请开始编写 Node.JS(或 php),因为 java+maven 根本不应该那样工作。
-
就我而言,我的项目有许多微服务,它们具有固定版本的依赖项。该库是 SNAPSHOT 版本,因此没有服务使用该库的源代码版本。修改库时,我想在所有服务和所有依赖版本中找到某个类的所有用法,以便评估我可能想要升级到新版本库的服务。所以这个功能对我来说非常有用。
标签: maven intellij-idea