我有一个已导入Intellij的sbt项目。有时,我使用sbt在命令行中构建项目,然后在需要调试时从Intellij中构建它。但是,每次我交替使用时,都在不需要时需要完全重建。两种构建过程都输出到相同的类文件夹,即... / target / scala-2.11 / classes,所以我不明白为什么会继续进行完全重建?
IntelliJ IDEA无法重用其他构建系统生成的类,因为它具有自己的增量编译器,该编译器跟踪依赖关系并在编译过程中构建缓存,以便在更改代码时只能编译已修改的文件和依赖文件。当您使用SBT / Maven / Gradle或命令行javac进行构建时,IntelliJ IDEA编译器缓存不知道更改了哪些内容以及应编译的文件,因此它将执行完全重建。
一种解决方案是将不同的输出目录用于IDE和SBT,这样IntelliJ IDEA将仅重建自IDE上次构建以来修改的文件,而命令行SBT生成将不会触发IDE中的重建。
使用sbt-ide-settings插件执行此配置。
将以下内容添加到plugins.sbt
(或在其中配置插件的任何文件中):
resolvers += Resolver.url("jetbrains-bintray",url("http://dl.bintray.com/jetbrains/sbt-plugins/"))(Resolver.ivyStylePatterns)
addSbtPlugin("org.jetbrains" % "sbt-ide-settings" % "0.1.2")
这是如何在中自定义IDE输出目录build.sbt
:
ideOutputDirectory in Compile := Some(new File("target/idea/classes"))
ideOutputDirectory in Test := Some(new File("target/idea/test-classes"))
随时根据需要更改路径。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句