例を次に示しbuild.sbt
ます。
import AssemblyKeys._
assemblySettings
buildInfoSettings
net.virtualvoid.sbt.graph.Plugin.graphSettings
name := "scala-app-template"
version := "0.1"
scalaVersion := "2.9.3"
val FunnyRuntime = config("funnyruntime") extend(Compile)
libraryDependencies += "org.spark-project" %% "spark-core" % "0.7.3" % "provided"
sourceGenerators in Compile <+= buildInfo
buildInfoPackage := "com.psnively"
buildInfoKeys := Seq[BuildInfoKey](name, version, scalaVersion, target)
assembleArtifact in packageScala := false
val root = project.in(file(".")).
configs(FunnyRuntime).
settings(inConfig(FunnyRuntime)(Classpaths.configSettings ++ baseAssemblySettings ++ Seq(
libraryDependencies += "org.spark-project" %% "spark-core" % "0.7.3" % "funnyruntime"
)): _*)
目標は、spark-core"provided"
を使用して、それとその依存関係がアセンブリ アーティファクトに含まれないようにすることですが、run
- および -test
関連タスクのランタイム クラスパスにそれらを再インクルードすることです。
カスタム スコープを使用すると最終的には役立つようですが、実際にデフォルト/グローバル実行/テスト タスクでカスタム スコープを使用しlibraryDependencies
、できればデフォルトをオーバーライドする方法がわかりません。私は次のことを試しました:
(run in Global) := (run in FunnyRuntime)
などは駄目です。
要約すると、これは本質的に、servlet-api が「提供された」スコープにあり、実行/テスト タスクが実際に実行中のコードに servlet-api を提供するサーブレット コンテナをフォークする Web ケースの一般化のように感じます。ここでの唯一の違いは、別の JVM/環境をフォークしていないことです。これらのタスクのクラスパスを手動で拡張し、「提供された」スコープを効果的に「元に戻す」ことを望んでいますが、アセンブリ成果物から依存関係を引き続き除外する方法で行います。