web-dev-qa-db-ja.com

scala-libraryは2回インポートされましたか?

ScalaでSBTを使用してIntellijで単純なHello Worldアプリケーションを実行しようとしているだけですが、これも非常に難しいようです。

私はここの指示に従いました: https://www.cloudera.com/tutorials/setting-up-a-spark-development-environment-with-scala/.html

私はEclipseとMavenでの作業に使用しています...ここではIntellijとSBTを使用しているので、最善を尽くしますが、少し迷っています。これが私がやったことです:

  • Intellij、SBTをインストールしました。
  • File> Settings> Build、Execution、Deployment> Build tools> sbt> Launcherを設定して、IntellijでSBTランチャーを構成しました
  • Java 1.8、SBT 1.3、Scala 2.13
  • この手順では、Scalaクラスを作成できませんでしたが、「sbtプロジェクトを再インポート」すると、scalaクラスがリストに表示されます作成する新しい要素。
  • Mainメソッドでオブジェクトを作成します。
    object HelloScala {
      def main(args: Array[String]): Unit = {
        println("Hello world!")
      }
    }

そのメインを実行しようとすると、次のエラーが発生します。

エラー:scalac:Scalaコンパイラクラスパス= Scala SDK sbt:org.scala-lang:scala-library:2.13.0:jar

私のbuild.sbt:

name := "HelloScala"
version := "0.1"
scalaVersion := "2.13.0"

ファイル>プロジェクト構造>ライブラリ>コンパイラクラスパスでコンパイラクラスパスを確認しました。

file:///AppData/Local/Coursier/cache/v1/https/repo1.maven.org/maven2/jline/jline/2.14.6/jline-2.14.6.jar
file:///AppData/Local/Coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-compiler/2.13.0/scala-compiler-2.13。 0.jar
file:///AppData/Local/Coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-library/2.13.0/scala-library-2.13。 0.jar
file:///AppData/Local/Coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-reflect/2.13.0/scala-reflect-2.13。 0.jar

ターゲットディレクトリを削除し、キャッシュを無効にし、.ideaフォルダーを再生成して削除し、intellijに再作成させ、プロジェクト構造内の他のscala-library.jarから検索しました。何も見つかりません...

本当に...なぜscala-libraryが2度参照されるのか分かりません。

scalaバージョンを2.13.0から2.11.0に変更すると、同じ問題が発生します。

エラー:scalac:Scalaコンパイラクラスパス= Scala SDK sbt:org.scala-lang:scala-library:2.11.0:jar

だが ! build = sbtのscalaバージョンをコメント化すると、

name := "HelloScala"
version := "0.1"
//scalaVersion := "2.11.0"

次に、ターゲットディレクトリをクリアし、sbtプロジェクトを再インポートして実行しようとすると、機能します!そして、ターゲットディレクトリに、新しいscala-2.12フォルダーがあります。

詳細については、私はWindows 10、Intellij 2019.2、JDK 1.8、SBT 13を使用しています

どんな助けでも本当に感謝しています!

23
cenote

これを試して:

外部ライブラリ> [右クリック] sbt:org.scala-lang:scala-library:x.x.x:jar> Open Library Settings> Project Settings> Libraries

クラス、ソース、JavaDocsのセクションがあります。 [JavaDocs]をクリックして、上記のマイナス記号で削除します。 OKをクリックします。

Sbtプロジェクトを再インポートします(右側のsbtツールバー上)。


それでも、エラーが発生する理由や、エラーが修正される理由がわかりません。

30
Jeffmylife

TL; DR

IDEAプロジェクトをsbt 1.2.8に戻す

Select sbt version 1.2.8 in the New Project dialog


細部

私は今週末、IntelliJ IDEAの新規インストールで同じ問題と戦っています。 IDEのさまざまなバージョンを試してみましたが、上記で提案された他の修正の一部を試しましたが、実際に機能しているように思われた唯一の解決策は、自動生成された.idea/libraries/sbt__org_scala_lang_scala_library_2_13_0_jar.xmlファイルを使用して、重複するJARエントリを削除します。

シェルでこのダイアログに気付いたとき、ようやくエラーと新しいsbtバージョンを関連付けました。

[info] Welcome to sbt 1.3.0.
[info] Here are some highlights of this release:
[info]   - Coursier: new default library management using https://get-coursier.io
[info]   - Super Shell: displays actively running tasks
[info]   - Turbo mode: makes `test` and `run` faster in interactive sessions. Try it by running `set ThisBuild / turbo := true`.
[info] See https://www.lightbend.com/blog/sbt-1.3.0-release for full release notes.

Sbt 1.3.0以降、Coursierが導入され、IDEAで生成されたXMLファイルの重複したJARエントリはすべてCoursierキャッシュディレクトリ。sbt1.2.8に戻すと問題が解決する可能性があると思いました。

案の定、sbt 1.3.0を使用しているときに "Multiple 'scala-library * .jar' files"エラーのみが表示されます。プロジェクトを複数回再作成しましたが、sbt 1.2.8を使用してもエラーは発生しません。

5
DaoWen

build.sbtにscalaVersionプロパティがない場合、sbtproject/build.sbtで指定されたバージョンを使用します