2013-03-28 8 views
13

SBTとそのプラグインで使用されているScalaのバージョンを変更する必要はありますか?Play、SBTおよびそのプラグインで使用されているScalaのバージョンを変更するにはどうすればよいですか?

私はPlay Framework 2.1.1-RC2を使用しています。 Scala 2.10.1を使用する新しいプロジェクトを作成したいと思います。私はBuild.scala

    • 追加の依存"org.scala-lang" % "scala-compiler" % "2.10.1"を以下のなかったことBuild.scala

    に2.10.1に変数scalaVersionを初期化することを実現するためにそれから私はplay aboutのコマンドを実行し、次の出力

    [test2] $ about 
    Getting Scala 2.10.1 ... 
    downloading http://repo1.maven.org/maven2/org/scala-lang/scala-compiler/2.10.1/scala-compiler-2.10.1.jar ... 
         [SUCCESSFUL ] org.scala-lang#scala-compiler;2.10.1!scala-compiler.jar (7401ms) 
    downloading http://repo1.maven.org/maven2/org/scala-lang/scala-library/2.10.1/scala-library-2.10.1.jar ... 
         [SUCCESSFUL ] org.scala-lang#scala-library;2.10.1!scala-library.jar (4309ms) 
    downloading http://repo1.maven.org/maven2/org/scala-lang/scala-reflect/2.10.1/scala-reflect-2.10.1.jar ... 
         [SUCCESSFUL ] org.scala-lang#scala-reflect;2.10.1!scala-reflect.jar (2144ms) 
    downloading http://repo1.maven.org/maven2/org/scala-lang/jline/2.10.1/jline-2.10.1.jar ... 
         [SUCCESSFUL ] org.scala-lang#jline;2.10.1!jline.jar (201ms) 
    :: retrieving :: org.scala-sbt#boot-scala 
         confs: [default] 
         5 artifacts copied, 0 already retrieved (24386kB/58ms) 
    [info] This is sbt 0.12.2 
    [info] The current project is {file:/C:/work/test_projects/test2/}test2 
    [info] The current project is built against Scala 2.10.1 
    [info] Available Plugins: play.Project, sbt.PlayProject, com.typesafe.sbteclipse.plugin.EclipsePlugin, com.typesafe.sbtidea.SbtIdeaPlugin 
    [info] sbt, sbt plugins, and build definitions are using Scala 2.9.2 
    
    を得ました

    最後の行が私の心配です。 Scala 2.9.2が使用されているとのことです。どうすれば変更できますか?コンパイルに使用するバージョンに影響しますか私のコードですか?

    更新:このようにコンパイラのバージョンを変更すると、正しく動作しませんでした。私は私のアプリを実行した後、私はプレイコンソールに次の警告を持っている:

    [warn] Potentially incompatible versions of dependencies of {file:/C:/work/test_projects/test2/}test2: 
    [warn] org.scala-lang: 2.10.1, 2.10.0 
    [info] Compiling 5 Scala sources and 1 Java source to C:\work\test_projects\test2\target\scala-2.10\classes... 
    [info] 'compiler-interface' not yet compiled for Scala 2.10.1. Compiling... 
    [info] Compilation completed in 8.608 s 
    [warn] Potentially incompatible versions of dependencies of {file:/C:/work/test_projects/test2/}test2: 
    [warn] org.scala-lang: 2.10.1, 2.10.0 
    [info] play - Application started (Dev) 
    [warn] Potentially incompatible versions of dependencies of {file:/C:/work/test_projects/test2/}test2: 
    [warn] org.scala-lang: 2.10.1, 2.10.0 
    
  • 答えて

    13

    SBTは、すべてのScalaのアプリケーションのように、それはScalaのバイナリ互換性規則を遵守する必要があり、Scalaのアプリケーションである、と。具体的には、バージョン2.8,2.9および2.10は互いに互換性がありません。

    つまり、Playで使用されるSBTバージョンがScala 2.9.2でコンパイルされているため、すべてのプラグインとすべてのプロジェクトの定義は別の2.9.xバージョンでコンパイルする必要があります。これは、Build.scalaがSBTによって単純に実行されるものではないため、はSBT実行の一部になります。

    しかし、これはあなたのアプリケーションをどのようなバージョンのScalaでコンパイルするかに関係しています。 SBTは任意のScalaバージョンを使用でき、複数のScalaバージョンを同時に作成することもできます。これは、Scalaライブラリが複数のScalaバージョンのバイナリを提供する方法です。

    +0

    ありがとうございます。それは私の質問に答えます。自分の答えを追加して、ターゲットバージョンをどのように変更したのか説明します。 – expert

    11

    私の実験の最終目標は、プロジェクトをビルドするために使用したScalaコンパイラのバージョンを変更することでした。

    複数の試行の後、私はそれをうまく実現できないと結論づけました。 Play Frameworkのクリエイターが取り組むべきことだと思います。

    Build.scalaのscalaVersion2.10.1-localの設定はあまり役に立ちませんでした。 SBTはMaven/Ivyに行き、私が欲しくない2.10.0をダウンロードしているようです。アプリケーションをコンパイルした後、私は互換性のない依存関係に関する警告を受け取ります。

    {PLAY_HOME}\framework\project\Build.scalaには2.10.0の変数が設定されていると思います。

    "優雅な"ソリューションはSBTに伝えることでした。私はScalaのローカルコピーをBuildで変数を設定して使用します。Scala 2.10.0ライブラリが不足して

    • Scalaのファセット参照を:Scalaの

      scalaVersion := "2.10.1-local", 
      autoScalaLibrary := false, 
      scalaHome := Some(file("/Program Files (x86)/scala/")) 
      

      しかし、まだ、私はplay ideaコマンド結果のプロジェクトとのIntelliJ IDEAの設定を作成する場合、いくつかは、具体的には、クリーンアップが必要です。

    • モジュールTEST3-ビルドはScala 2.9.2ライブラリ、私は私の実験もプレイやスカラ座を学んでいる他の人々を願っています

    を逃すに依存しています。

    詳細はこちらhttp://www.scala-sbt.org/release/docs/Howto/scala.html

    関連する問題