如何在sbt项目中的其他位置使用scala源并使其与IntelliJ IDEA一起使用?

时间:2017-04-28 19:43:49

标签: scala intellij-idea sbt

这个项目使用sbt编译并运行良好。 https://github.com/stuhajbejovic/multi-project-sbt

我遇到的问题是当我在intellij想法中打开hello.sbt项目时,它说:

cannot resolve symbol testing

当我将鼠标悬停在hello.scala第1行的红色导入语句上时。

我也尝试在build.sbt中使用它:

unmanagedSourceDirectories in Compile += baseDirectory.value / "../common"

但是我在IntelliJ中收到以下警告,无法在IntelliJ中运行应用程序:

这些源根不能包含在IDEA项目模型中。

解决方案:为这些源声明一个SBT项目,并将项目包含在依赖项中。

有没有办法让IntelliJ遵循sbt配置到公共源的位置?

1 个答案:

答案 0 :(得分:2)

您需要使用多项目 SBT 构建文件。也就是说,为整个项目提供一个build.sbt文件。 IntelliJ 应该毫无问题地尊重它。

我认为你的build.sbt文件应该放在你项目的根目录中,需要看起来像这样:

lazy val commonSettings = Seq(
  scalaVersion := "2.12.1",
  version := "0.1"
)

lazy val common = project.in(file("sbt_testing/common")).
settings(commonSettings: _*).
settings(
  name := "common"
)

lazy val hello = project.in(file("sbt_testing/hello")).
dependsOn(common).
settings(commonSettings: _*).
settings(
  name := "Hello"
)

如您所见,您可以对两个项目共有的设置进行分组,并确保它们之间更好的一致性。

您需要删除build.sbtsbt_testing/common中的sbt_testing/hello个文件。

更新:更正了 SBT commonSettings文件中build.sbt的使用情况。为混乱道歉!

更新2 :为了运行HelloWorld类中的代码,您需要执行以下操作(我还将“root”项目重命名为“hello”):

$ sbt
[info] Loading global plugins from /home/user/.sbt/0.13/plugins
[info] Loading project definition from /home/user/src/multiSbt/project
[info] Set current project to multisbt (in build file:/home/user/src/multiSbt/)
> project hello
[info] Set current project to Hello (in build file:/home/user/src/multiSbt/)
> run
[info] Compiling 1 Scala source to 
/home/user/src/multiSbt/sbt_testing/hello/target/scala-2.12/classes...
[info] Running HelloWorld 
Hello, world!
This is from common: testing 123
[success] Total time: 3 s, completed May 1, 2017 3:27:16 PM

有关 SBT 多项目构建的更多信息,请参阅official documentation ...