首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何配置IntelliJ以管理不同的Scala版本

如何配置IntelliJ以管理不同的Scala版本
EN

Stack Overflow用户
提问于 2022-11-07 00:59:19
回答 1查看 31关注 0票数 0

我有一个由SBT管理的Scala项目,具有以下源文件夹结构:

代码语言:javascript
复制
src
 |-main
 |  |-scala
 |  |-scala-2
 |  |-scala-3 

文件夹

  • scala包含在Scala 2和Scala 3中编译的代码。
  • scala-2包含特定于Scala 2的代码。
  • scala-3包含特定于Scala 3的代码。

SBT很好地处理了这三个文件夹,从Scala 2切换到Scala 3,测试都很好,甚至还可以为Scala 2和3释放JAR。

但是,我使用IntelliJ进行开发,并且无法让它在两个并发Scala版本中很好地工作。例如,它将处理文件夹scalascala-2,但忽略scala-3。这意味着我所有的IntelliJ特性(如代码检查、自动完成等)都可以用于第一个文件夹,而不是第三个文件夹。

如何正确配置IntelliJ以处理不同的Scala版本和源代码?

我在用:

  • IntelliJ 2022.2.3构建#IC-222.4345.14建于2022年10月5日。
  • Scala插件2022.2.17建于2022年11月4日
EN

回答 1

Stack Overflow用户

发布于 2022-11-07 10:40:47

最好的方法是禁用IntelliJ中的一些项目,并且只启用当前要处理的项目。例如,如果我只想处理与sbt-投影矩阵 (和sbt-命令矩阵)交叉编译的项目的JVV2.13:

代码语言:javascript
复制
// project/plugins.sbt
addSbtPlugin("com.eed3si9n" % "sbt-projectmatrix" % "0.9.0")
addSbtPlugin("com.indoorvivants" % "sbt-commandmatrix" % "0.0.5")
addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.11.0")
addSbtPlugin("org.scala-native" % "sbt-scala-native" % "0.4.7")
addSbtPlugin("org.jetbrains" % "sbt-ide-settings" % "1.1.0")
代码语言:javascript
复制
// build.sbt

val scala2_13version = "2.13.10"
val scala3version = "3.2.0"

// which version I want to use in my project
val ideScala = scala2_13version
Global / excludeLintKeys += ideSkipProject
val only1JvmScalaInIde = MatrixAction
  .ForPlatforms(VirtualAxis.jvm)
  .Configure(_.settings(ideSkipProject := (scalaVersion.value != ideScala)))
val noJsNoNativeInIde = MatrixAction
  .ForPlatforms(VirtualAxis.js, VirtualAxis.native)
  .Configure(_.settings(ideSkipProject := true))

val example = projectMatrix
  .in(file("example"))
  .someVariations(
    List(scala2_13version, scala3version),
    List(VirtualAxis.jvm, VirtualAxis.js, VirtualAxis.native)
  )(only1JvmScalaInIde, noJsNoNativeInIde)
  .settings(
    // ...
  )

val root = project
  .in(file("."))
  .aggregate(example.projectRefs: _*)

最关键的是

代码语言:javascript
复制
ideSkipProject := true

您将申请所有您不希望IntelliJ导入的项目(键来自addSbtPlugin("org.jetbrains" % "sbt-ide-settings" % "1.1.0")插件)。您可以调整它以适应您正在使用的任何其他交叉编译解决方案。

就我个人而言,我使用上面的工作流,将ideScala设置为2.13或3,每次只使用一个版本,并在需要切换时编辑它并重新加载sbt。虽然这些项目没有导入到IntelliJ中,但是sbt仍然可以看到并构建所有这些项目。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74340971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档