IntelliJ:如何使用从本地源导入的模块覆盖 SBT 中的依赖项?

Seg*_*ult 5 java intellij-idea sbt playframework-2.0

我有 2 个项目,项目 A 和项目 B。项目 A 是一个 Play2 应用程序,它依赖于项目 B(这是一个客户端库)。目前项目 B 是从我们的 SBT 工件中提取的。我想设置 IntelliJ,以便从我计算机上的项目源中提取项目 B,而不是从其中指定的工件中提取。

我已将项目 B 添加为项目 A 的模块,并将模块 B 添加到模块 A 的依赖项中。然后我将模块 B 置于依赖项列表的最顶部。代码的静态分析似乎工作正常,当我更新项目 A 的代码以使用我在项目 B 中更新的新方法签名时没有显示编译错误。但是,当我运行 Play 应用程序时,我得到了一个编译错误表明方法签名不正确。

有没有办法覆盖运行时用于 SBT 和 Play 应用程序的模块?

Jus*_*ser 3

你可以通过 sbt 来做到这一点。在你的build.sbt,例如:

val localDep = ProjectRef(file("/Users/me/projects/b"), "b")

dependsOn(localDep)
Run Code Online (Sandbox Code Playgroud)

IntelliJ 会将此依赖项作为模块导入。但是,您应该删除库依赖项,以避免类路径冲突。

当然,这使得该项目难以共享,除非其他开发人员将该项目放在同一位置。在这种情况下,我会创建一个多项目构建,这通常是具有单独结果工件的紧密耦合项目的最佳选择。

另一种选择是 git 项目依赖项:

val projectDep = ProjectRef(uri("git://github.com/me/b"),"b")
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你!我的声誉还不足以投票,但我已经接受了你的回答。 (2认同)