【问题标题】:IntelliJ not referencing the correct Scala version on buildIntelliJ 在构建时未引用正确的 Scala 版本
【发布时间】:2018-06-24 14:21:43
【问题描述】:

我正在使用 IntelliJ IDEA v2017.3.2 社区版,它似乎一直在为 Scala 插件提取错误的 repo 版本。

我尝试在 build.sbt 和 idea.sbt 中设置 scalaVersion := "2.11.8",但它一直试图从 2.12 插件存储库中提取。

我的 build.sbt 如下:

import sbt.Keys._
import sbt._
import sbtrelease.{Version => SbtVersion}

name := "lambda-geotrellis-tile-server"

resolvers += Resolver.sonatypeRepo("public")
scalaVersion := "2.11.8"
releaseNextVersion := { ver => SbtVersion(ver).map(_.bumpMinor.string).getOrElse("Error") }

lazy val commonSettings = Seq(
  organization := "com.jisantuc",
  version := "0.0.1",
  cancelable in Global := true,
  scalaVersion := Version.scala,
  scalacOptions := Seq(
    "-deprecation",
    "-unchecked",
    "-feature",
    "-language:implicitConversions",
    "-language:reflectiveCalls",
    "-language:higherKinds",
    "-language:postfixOps",
    "-language:existentials",
    "-language:experimental.macros",
    "-feature"
  ),
  shellPrompt := { s => Project.extract(s).currentProject.id + " > " },
  addCompilerPlugin("org.scalamacros" % "paradise" % "2.1.0" cross CrossVersion.full)
)


libraryDependencies ++= Seq(
  Dependencies.awsJavaCore,
  Dependencies.awsJavaEvents,
  Dependencies.awsJavaLog4j,
  Dependencies.commonsIo,
  Dependencies.geotrellisS3,
  Dependencies.geotrellisRaster,
  Dependencies.geotrellisSpark,
  Dependencies.circeCore,
  Dependencies.circeGeneric,
  Dependencies.circeParser
)

lazy val root = Project("root", file("."))
  .settings(resolvers += "LocationTech GeoTrellis Releases" at "https://repo.locationtech.org/content/repositories/geotrellis-releases")
  .settings(commonSettings:_*)

assemblyMergeStrategy in assembly := {
  case "reference.conf" => MergeStrategy.concat
  case "application.conf" => MergeStrategy.concat
  case n if n.endsWith(".SF") || n.endsWith(".RSA") || n.endsWith(".DSA") => MergeStrategy.discard
  case "META-INF/MANIFEST.MF" => MergeStrategy.discard
  case _ => MergeStrategy.first
}
assemblyJarName in assembly := s"lambda-geotrellis-tile-server.jar"

import S3._
s3Settings
mappings in upload := Seq((file(s"target/scala-2.11/${name.value}.jar"), s"${name.value}.jar"))
host in upload := "lambda-geotrellis-tile-server-jar.s3.amazonaws.com"
progress in upload := true
upload <<= upload dependsOn assembly

initialCommands in console := """
  |import io.circe.parser._
  |import io.circe.syntax._
  |import geotrellis.spark.io._
  |import geotrellis.spark.io.s3._
""".trim.stripMargin

通过 ./sbt 程序集构建时它工作正常,但是当我尝试在 IntelliJ 中构建它时,会发生这种情况:

[warn]   file:////home/ken/.sbt/preloaded/com/github/gseitz/sbt-release_2.12_1.0/1.0.0/sbt-release-1.0.0.pom
[warn] ==== sbt-plugin-releases: tried
[warn]   https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/com.github.gseitz/sbt-release/scala_2.12/sbt_1.0/1.0.0/ivys/ivy.xml
[warn]  module not found: com.eed3si9n#sbt-assembly;0.14.3
[warn] ==== typesafe-ivy-releases: tried
[warn]   https://repo.typesafe.com/typesafe/ivy-releases/com.eed3si9n/sbt-assembly/scala_2.12/sbt_1.0/0.14.3/ivys/ivy.xml
[warn] ==== sbt-plugin-releases: tried
[warn]   https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/com.eed3si9n/sbt-assembly/scala_2.12/sbt_1.0/0.14.3/ivys/ivy.xml
[warn] ==== local: tried
[warn]   /home/ken/.ivy2/local/com.eed3si9n/sbt-assembly/scala_2.12/sbt_1.0/0.14.3/ivys/ivy.xml
[warn] ==== public: tried
[warn]   https://repo1.maven.org/maven2/com/eed3si9n/sbt-assembly_2.12_1.0/0.14.3/sbt-assembly-0.14.3.pom
[warn] ==== local-preloaded-ivy: tried
[warn]   /home/ken/.sbt/preloaded/com.eed3si9n/sbt-assembly/0.14.3/ivys/ivy.xml
[warn] ==== local-preloaded: tried
[warn]   file:////home/ken/.sbt/preloaded/com/eed3si9n/sbt-assembly_2.12_1.0/0.14.3/sbt-assembly-0.14.3.pom
[warn] ==== sbt-plugin-releases: tried
[warn]   https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/com.eed3si9n/sbt-assembly/scala_2.12/sbt_1.0/0.14.3/ivys/ivy.xml
[warn]  module not found: com.typesafe.sbt#sbt-s3;0.9
[warn] ==== typesafe-ivy-releases: tried
[warn]   https://repo.typesafe.com/typesafe/ivy-releases/com.typesafe.sbt/sbt-s3/scala_2.12/sbt_1.0/0.9/ivys/ivy.xml
[warn] ==== sbt-plugin-releases: tried
[warn]   https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/com.typesafe.sbt/sbt-s3/scala_2.12/sbt_1.0/0.9/ivys/ivy.xml
[warn] ==== local: tried
[warn]   /home/ken/.ivy2/local/com.typesafe.sbt/sbt-s3/scala_2.12/sbt_1.0/0.9/ivys/ivy.xml
[warn] ==== public: tried
[warn]   https://repo1.maven.org/maven2/com/typesafe/sbt/sbt-s3_2.12_1.0/0.9/sbt-s3-0.9.pom
[warn] ==== local-preloaded-ivy: tried
[warn]   /home/ken/.sbt/preloaded/com.typesafe.sbt/sbt-s3/0.9/ivys/ivy.xml
[warn] ==== local-preloaded: tried
[warn]   file:////home/ken/.sbt/preloaded/com/typesafe/sbt/sbt-s3_2.12_1.0/0.9/sbt-s3-0.9.pom
[warn] ==== sbt-plugin-releases: tried
[warn]   https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/com.typesafe.sbt/sbt-s3/scala_2.12/sbt_1.0/0.9/ivys/ivy.xml
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  ::          UNRESOLVED DEPENDENCIES         ::
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  :: com.github.gseitz#sbt-release;1.0.0: not found
[warn]  :: com.eed3si9n#sbt-assembly;0.14.3: not found
[warn]  :: com.typesafe.sbt#sbt-s3;0.9: not found
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::

..这将成为永久性的,即使尝试再次使用 ./sbt 程序集进行构建也是如此。我试图找到那个 2.12 来自哪里,但我没有看到指定它的配置文件。

另外,更改 idea.sbt 中的 scalaVersion 会导致此错误:

[error] Modules were resolved with conflicting cross-version suffixes in {file:/home/ken/.sbt/1.0/plugins/}global-plugins:
[error]    org.scala-lang.modules:scala-xml _2.11, _2.12
[error]    org.scala-lang.modules:scala-parser-combinators _2.11, _2.12
[error] java.lang.RuntimeException: Conflicting cross-version suffixes in: org.scala-lang.modules:scala-xml, org.scala-lang.modules:scala-parser-combinators

我猜这两个模块是 IntelliJ IDEA 使用的?

【问题讨论】:

  • 附带说明,我认为您不需要 Scala 2.10.x 之后的宏天堂。

标签: scala intellij-idea


【解决方案1】:

SBT 和您的应用程序可以(并且很可能会)使用两个不同的 Scala 版本(并且 SBT 使用的一个不受构建定义文件的控制,而是由 SBT 本身使用的 Scala 版本控制)。 SBT 0.13.x 是用 Scala 2.10.x 编写的(这迫使插件也使用该版本),而 SBT 1.0.x 现在是在 Scala 2.12 中编写的。

我相信您可以通过降级到支持所需插件的 SBT 版本或升级到支持 Scala 2.12/SBT 1.0.x 的所需插件版本来解决您的问题(例如,同时sbt-assembly 0.14.3, 0.14.6 可以)。

【讨论】:

  • 升级了插件并以某种方式使其编译。有点担心 sbt-s3 插件,因为发生了很多变化,但这是向前迈出的一大步。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-15
相关资源
最近更新 更多