2016-10-21 12 views
0

私はテストアセンブリのjarにテスト依存関係をパッケージ化できません。sbt-assembly jarにテスト依存関係を含めるには?

... 

name := "project" 

scalaVersion := "2.10.6" 

assemblyOption in (Compile, assembly) := (assemblyOption in (Compile, assembly)).value.copy(includeScala = false) 

fork in Test := true 

parallelExecution in IntegrationTest := false 

lazy val root = project.in(file(".")).configs(IntegrationTest.extend(Test)).settings(Defaults.itSettings: _ *) 

Project.inConfig(Test)(baseAssemblySettings) 

test in (Test, assembly) := {} 

assemblyOption in (Test, assembly) := (assemblyOption in (Test, assembly)).value.copy(includeScala = false, includeDependency = true) 

assemblyJarName in (Test, assembly) := s"${name.value}-test.jar" 

fullClasspath in (Test, assembly) := { 
    val cp = (fullClasspath in Test).value 
    cp.filter{ file => (file.data.name contains "classes") || (file.data.name contains "test-classes")} ++ (fullClasspath in Runtime).value 
} 

libraryDependencies ++= Seq(
    ... 
    "com.typesafe.play" %% "play-json" % "2.3.10" % "test" excludeAll ExclusionRule(organization = "joda-time"), 
    ... 
) 

... 

私はsbt test:assemblyを使用して、私の脂肪のjarファイルを組み立てるときに、ある脂肪ジャーproject-test.jarを生成するが、play-json依存関係がにパッケージされていない:しかし

$ jar tf /path/to/project-test.jar | grep play 
$ 

ここに私のbuild.sbtからの抜粋です、私がplay-jsonのdep(すなわち"com.typesafe.play" %% "play-json" % "2.3.10" excludeAll ExclusionRule(organization = "joda-time"))から"test"の設定を削除すると、それが含まれていることがわかります:

$ jar tf /path/to/project-test.jar | grep play 
... 
play/libs/Json.class 
... 
$ 

私は間違ったことや何かをしていませんか?ここでの私の目標は、私がissuseの原因であることが判明上記の私は投稿元build.sbt抜粋で重要な部分を残してきた

答えて

0

ONLY test:assemblyジャーplay-jsonライブラリおよびNOT assembly jarファイルを含めることです。

fullClasspath in (Test, assembly) := { 
    val cp = (fullClasspath in Test).value 
    cp.filter{ file => (file.data.name contains "classes") || (file.data.name contains "test-classes")} ++ (fullClasspath in Runtime).value 
} 

このコードブロックは、基本的にテストクラスパスからdepsを除外していました。苦しいマージ競合を避けるためにこれを含めます。私はロジックを追加して、必要とされたplay-json depを含めるように修正しました:

fullClasspath in (Test, assembly) := { 
    val cp = (fullClasspath in Test).value 
    cp.filter{ file => 
    (file.data.name contains "classes") || 
    (file.data.name contains "test-classes") || 
    // sorta hacky 
    (file.data.name contains "play") 
    } ++ (fullClasspath in Runtime).value 
} 
関連する問題