IntelliJ:如何使用从本地源导入的模块覆盖 SBT 中的依赖项?
IntelliJ: How do I override a dependency in SBT with a module imported from local source?
我有 2 个项目,项目 A 和项目 B。项目 A 是一个 Play2 应用程序,它依赖于项目 B(它是一个客户端库)。目前项目 B 是从我们的工件中使用 SBT 提取的。我想设置 IntelliJ,以便从我计算机上的项目源中提取项目 B,而不是从中指定的工件中提取。
我已将项目 B 添加为项目 A 的一个模块,并将模块 B 添加到模块 A 的依赖项中。然后我将模块 B 置于依赖列表的最顶部。代码的静态分析似乎工作正常,当我更新项目 A 的代码以使用我在项目 B 中更新的新方法签名时,没有显示编译错误。但是,当我 运行 Play App我收到一个编译错误,指出方法签名不正确。
有没有办法覆盖 SBT 和 Play 应用在 运行 时使用的模块?
您可以通过 sbt 执行此操作。在您的 build.sbt
中,例如:
val localDep = ProjectRef(file("/Users/me/projects/b"), "b")
dependsOn(localDep)
IntelliJ 会将此依赖项作为模块导入。但是,您应该删除库依赖项,以避免类路径冲突。
自然地,这使得项目难以共享,除非其他开发人员在同一位置拥有该项目。在那种情况下,我会创建一个 multi-project build,这通常是具有单独结果工件的紧密耦合项目的最佳选择。
另一个选项是 git 项目依赖项:
val projectDep = ProjectRef(uri("git://github.com/me/b"),"b")
我有 2 个项目,项目 A 和项目 B。项目 A 是一个 Play2 应用程序,它依赖于项目 B(它是一个客户端库)。目前项目 B 是从我们的工件中使用 SBT 提取的。我想设置 IntelliJ,以便从我计算机上的项目源中提取项目 B,而不是从中指定的工件中提取。
我已将项目 B 添加为项目 A 的一个模块,并将模块 B 添加到模块 A 的依赖项中。然后我将模块 B 置于依赖列表的最顶部。代码的静态分析似乎工作正常,当我更新项目 A 的代码以使用我在项目 B 中更新的新方法签名时,没有显示编译错误。但是,当我 运行 Play App我收到一个编译错误,指出方法签名不正确。
有没有办法覆盖 SBT 和 Play 应用在 运行 时使用的模块?
您可以通过 sbt 执行此操作。在您的 build.sbt
中,例如:
val localDep = ProjectRef(file("/Users/me/projects/b"), "b")
dependsOn(localDep)
IntelliJ 会将此依赖项作为模块导入。但是,您应该删除库依赖项,以避免类路径冲突。
自然地,这使得项目难以共享,除非其他开发人员在同一位置拥有该项目。在那种情况下,我会创建一个 multi-project build,这通常是具有单独结果工件的紧密耦合项目的最佳选择。
另一个选项是 git 项目依赖项:
val projectDep = ProjectRef(uri("git://github.com/me/b"),"b")