2017-03-24 15 views
0

私は複数のprojectを持っています。私はそのサブプロジェクトの1つにgitバージョンのクラスを作成しています。SBTサブプロジェクトアクセスルートプロジェクトデータ(依存バージョン)

def iUberdataCoreVersion(version: Option[String] = Some("Not a Git Repository"), dir: File) = { 
    val file = dir/"UberdataCoreVersion.scala" 
    IO.write(
    file, 
    s"""package eleflow.uberdata.core\n object UberdataCoreVersion{\n   val version = "${version.get}"\n 
     val sparkVersion = ${allDependencies.value.filter(_.extraString.startsWith("spark")).head.crossVersion} 
      |}\n""".stripMargin) 
    Seq(file) 
} 

依存関係は、ルートプロジェクトのbuild.sbtファイルで定義されています。私はsparkのバージョン(私の依存関係の1つ)をこのファイルに追加したいと思います。サブプロジェクトビルドに引数を渡す方法や、依存関係を繰り返して、使用しているsparkのバージョンを見つける方法がありますか?

更新コメント

に必要に応じてここでの問題は、それが中だとは異なる方法でスパークに2つのバージョンがあり、バージョン2で、私はそれが(スパーククラスタにアクセスするための)コンテキストの作成できることですスパーク1.

root 
build.sbt 

lazy val subProject = project settings (libraryDependencies ++= Seq(
    "org.apache.spark" %% "spark-repl" % sparkVersion) 

私はそう、私はサブプロジェクトのビルドファイルに依存関係が挿入されている可能性が、私はそれをこのように設定した理由です、3つのサブプロジェクトを持っている、とスパークバージョンは、それらの間で共有されています。

ビルド引数としてsparkVersionが用意されているとします。

root 
    sub 
    build.sbt 

ここで、サブプロジェクトでは、スパークバージョンを含むファイルを作成します。これは、すでにgitコードで行っているように、プロパティファイルまたはsrcコードファイルで行うことができます。サブプロジェクトビルドを作成する際に、それを価値として受け取ることはできますか?

私はsparkのバージョンにコンテキストを介してアクセスすることができますが、それはそのプロパティを持っていますが、この特定のケースでは、コンテキストを作成する前にそれを行いたいのですが、それは私の問題です。

+1

ルートプロジェクトとサブプロジェクトが同じバージョンを使用していることを確認しようとしていますか?もしそうならば、バージョン番号をプロパティファイルに入れ、各サブプロジェクト – radumanolescu

+0

のbuild.sbtのプロパティファイルを読み込むか、別のファイル 'dependencies.sbt'に分割して、それぞれに必要なものを選ぶだけですプロジェクトを対応するファイルに保存します。つまり、すべてのデープを1つの場所に配置し、希望どおりに選択します。ルートフォルダ内のすべての '.sbt'ファイルは一緒にアセンブルされるので、(同じファイル内にあるように)互いにアクセスできます。 –

+0

@radumanolescu実際には、私はlibのバージョンをコードに入れようとしているのですが、コンテキストクラスをインスタンス化する前にこれを必要としているからです。 – dirceusemighini

答えて

1

プロパティをbuild.propertiesに定義し、それらをすべてのサブプロジェクトで使用します。この場合、Scalaのバージョンですが、任意の文字列を使用できます。

// ---------- ---------- multiproj/build.properties ---------- ---------- // 
scala.version = 2.11.8 
// ---------- ---------- multiproj/subproj/build.sbt ---------- ---------- // 
val props = SettingKey[Map[String, String]]("props") 

props := { 
    import scala.collection.JavaConversions._ 
    val pf = new java.util.Properties() 
    IO.load(pf, baseDirectory.value/".."/"build.properties") 
    pf.stringPropertyNames.map(p => p -> Option(System.getProperty(p)).getOrElse(pf.getProperty(p))).toMap 
} 

libraryDependencies ++= Seq(
    "org.scala-lang" % "scala-library" % props.value("scala.version") % "compile->*" 
, "org.scala-lang" % "scala-compiler" % props.value("scala.version") % "compile->*" 
) 
関連する問題