intelliJ IDEA支持不可变的sbt

时间:2017-03-02 23:59:29

标签: java intellij-idea sbt immutables-library

当使用带有IDEA和immutables的java sbt库时,编译和运行代码工作正常,但编辑器会给出"无法解析符号......"和"无法解决方法..."使用生成的类时出错。

以下the documentation for setting up IDEs适用于Maven,但无法解决sbt的问题。

如何使用sbt为IDEA上的生成源提供编辑器支持和代码完成功能?

1 个答案:

答案 0 :(得分:1)

首先,请按照the documentation中的说明进行操作。

  

要在IntelliJ IDEA中配置注释处理,请使用对话框首选项>项目设置>编译器>注释处理器。

接下来,问题是sbt将我们生成的源文件放在target/scala-2.n/classes/our/package中。这是已编译的.class文件的目录,因此我们需要在其他地方生成源。编辑IDEA设置对我们没有帮助,因此我们需要通过添加以下内容来修改build.sbt

// tell sbt (and by extension IDEA) that there is source code in target/generated_sources
managedSourceDirectories in Compile += baseDirectory.value / "target" / "generated_sources"
// before compilation happens, create the target/generated_sources directory
compile in Compile <<= (compile in Compile).dependsOn(Def.task({
  (baseDirectory.value / "target" / "generated_sources").mkdirs()
}))
// tell the java compiler to output generated source files to target/generated_sources
javacOptions in Compile ++= Seq("-s", "target/generated_sources")

最后,我们需要告诉IDEA,通过删除该目录中的排除项,不应忽略target/中的所有内容。要么转到文件&gt;项目结构&gt;项目设置&gt;单击模块,单击target目录并取消选择&#34;排除&#34;。或者,右键单击“项目”选项卡下的target目录,将目录标记为&gt;取消排除。

此时您应该看到编辑器支持工作,如果没有,请运行sbt clean compile以确保生成源。

更新:在最近的sbt版本中删除了<<=语法,您可以用

替换上面的第二个指令
// before compilation happens, create the target/generated_sources directory
compile in Compile := (compile in Compile).dependsOn(Def.task({
  (baseDirectory.value / "target" / "generated_sources").mkdirs()
})).value