3

2 つのバージョンの Scala を使用するマルチ プロジェクトがあります。は次のBuild.scalaようになります。

import sbt._
import Keys._

object Build extends sbt.Build {
  lazy val root: Project = Project(
    id = "scalacolliderugens",
    base = file("."),
    aggregate = Seq(gen, core)
  )

  lazy val gen  = Project(...)
  lazy val core = Project(...)

  val ugenGenerator = TaskKey[Seq[File]]("ugen-generate", "Generate UGen class files")

  def runUGenGenerator(source: File, cp: Seq[File]): Seq[File] = Nil // TODO
}

Scala 2.9.2 を使用した純粋なソース生成プロジェクトがある場合:

  lazy val gen = Project(
    id = "scalacolliderugens-gen",
    base = file("gen"),
    settings = Project.defaultSettings ++ Seq(
      scalaVersion := "2.9.2",  // !!!
      libraryDependencies ++= Seq(
        "org.scala-refactoring" % "org.scala-refactoring_2.9.1" % "0.4.1"
      ),
      libraryDependencies <+= scalaVersion { sv =>
        "org.scala-lang" % "scala-compiler" % sv
      }
    )
  )

生成されたソースを組み込んだ実際のプロジェクトは、Scala 2.10 に対してコンパイルされます。

 lazy val core = Project(
    id = "scalacolliderugens-core",
    base = file("core"),
    settings = Project.defaultSettings ++ Seq(
      scalaVersion := "2.10.0",  // !!!
      sourceGenerators in Compile <+= (ugenGenerator in Compile),
      ugenGenerator in Compile <<=
        (scalaSource in Compile, dependencyClasspath in Runtime in gen) map {
          (src, cp) => runUGenGenerator(src, cp.files)
        }
      )
    ).dependsOn(gen)

これをコンパイルすると、sbt 警告が表示されます。

[warn] Binary version (2.9.2) for dependency org.scala-lang#scala-library;2.9.2
[warn]  in de.sciss#scalacolliderugens_2.10;1.0.1 differs from Scala binary \
  version in project (2.10).
[info] Resolving org.scala-lang#scala-library;2.9.2 ...
[info] Done updating.
[warn] Binary version (2.9.2) for dependency org.scala-lang#scala-library;2.9.2
[warn]  in de.sciss#scalacolliderugens-gen_2.10;1.0.1 differs from Scala binary \
  version in project (2.10).
[warn] Binary version (2.9.2) for dependency org.scala-lang#scala-compiler;2.9.2
[warn]  in de.sciss#scalacolliderugens-gen_2.10;1.0.1 differs from Scala binary \
  version in project (2.10).

私は心配する必要がありますか?私はここで何か悪いことをしていますか?

4

3 に答える 3

1

わかった...

私は複数プロジェクトの SBT プロジェクトを持っていますが、通常、一部はすべてのプロジェクトで共有され、一部は各サブプロジェクトに固有の SBT 設定があります。私の場合、共通設定には使用する Scala バージョンが含まれています。

同じ方法でビルド仕様を構築し、Scala バージョン設定をサブプロジェクト固有の設定に入れることができます。必要に応じて、サブプロジェクトのすべてに共通の設定とサブプロジェクトのサブセットに共通の設定、および個々のサブプロジェクトに固有の設定がある場合は、設定をさらに階層化できます。

于 2013-02-07T16:03:24.310 に答える
0

異なるマイナー バージョンの Scala のバイトコードを混在させることはできません。つまり、2.9.x シリーズのコンパイラでコンパイルされたコードは、2.10.x (または 2.8.x) コンパイラで生成されたものと互換性がありません。

于 2013-02-07T14:56:34.607 に答える