【发布时间】:2016-12-28 11:51:05
【问题描述】:
我无法覆盖依赖项的合并策略。
问题源于cassandra依赖依赖单独的netty模块
val akkaCassandra = "com.typesafe.akka" %% "akka-persistence-cassandra" % "0.17"
如果我运行图依赖,它会输出:
| +-io.netty:netty-handler:4.0.33.Final
[info] | +-io.netty:netty-buffer:4.0.33.Final
[info] | | +-io.netty:netty-common:4.0.33.Final
[info] | |
[info] | +-io.netty:netty-codec:4.0.33.Final
[info] | | +-io.netty:netty-transport:4.0.33.Final
[info] | | +-io.netty:netty-buffer:4.0.33.Final
[info] | | +-io.netty:netty-common:4.0.33.Final
[info] | |
[info] | +-io.netty:netty-transport:4.0.33.Final
[info] | +-io.netty:netty-buffer:4.0.33.Final
[info] | +-io.netty:netty-common:4.0.33.Final
根据这个讨论,最好将合并策略定义为解决方案:
不幸的是,Netty 在每个标记中都有时间相关标记 metainfUntitled.jpg 中的 io.versions.properties 文件
这意味着包含的各种组件都有不同的 时间戳,这就是为什么一切都在破坏的原因。不幸的是,这是 底层 C* 驱动程序的开发,我猜我们可以排除这些网络 来自驱动程序的模块,并在连接器中包含 netty-all 但这似乎有点矫枉过正。
我认为只修复应用程序构建文件仍然是最好的 解决方案。
据此,应该实现覆盖的能力:
https://github.com/typesafehub/sbt-multi-jvm/issues/22
嵌套程序集配置应与自定义一起公开 其他 multijvm 键,以便用户可以解决这些问题。
我认为 PR #19 将启用此功能。变化在 msfrank@fe862ff#diff-ad54d47177586fbaf474e402dd1b3dc5R137 将通过 通过设置键定义的合并策略 (程序集中的assemblyMergeStrategy)只要文件不是其中之一 *.class、*.txt 或 NOTICE,它们是硬编码的合并策略
.
但是当我跑步时
sbt:multi-node-test
lazy val test = Project(id = "core-tests", base = file("./modules/core/tests"))
.settings(SbtMultiJvm.multiJvmSettings: _*)
.settings(
libraryDependencies ++= Dependencies.coreTests,
assemblyMergeStrategy in assembly := {
case x if x.endsWith("META-INF/io.netty.versions.properties") ⇒ MergeStrategy.first
},
compile in MultiJvm <<= (compile in MultiJvm) triggeredBy (compile in Test),
parallelExecution in Test := false,
executeTests in Test <<= (executeTests in Test, executeTests in MultiJvm) map {
case (testResults, multiNodeResults) ⇒
val overall =
if (testResults.overall.id < multiNodeResults.overall.id)
multiNodeResults.overall
else
testResults.overall
Tests.Output(overall,
testResults.events ++ multiNodeResults.events,
testResults.summaries ++ multiNodeResults.summaries)
},
licenses := Seq(("CC0", url("http://creativecommons.org/publicdomain/zero/1.0"))),
Settings.levelDb, Settings.test)
它仍然拒绝使用我定义的合并策略。
[error] 1 error was encountered during merge
[trace] Stack trace suppressed: run 'last core-tests/multi-jvm:assembly' for the full output.
[error] (core-tests/multi-jvm:assembly) deduplicate: different file contents found in the following:
[error] ~/.ivy2/cache/io.netty/netty-handler/jars/netty-handler-4.0.33.Final.jar:META-INF/io.netty.versions.properties
[error] ~/.ivy2/cache/io.netty/netty-buffer/jars/netty-buffer-4.0.33.Final.jar:META-INF/io.netty.versions.properties
[error] ~/.ivy2/cache/io.netty/netty-common/jars/netty-common-4.0.33.Final.jar:META-INF/io.netty.versions.properties
[error] ~/.ivy2/cache/io.netty/netty-transport/jars/netty-transport-4.0.33.Final.jar:META-INF/io.netty.versions.properties
[error] ~/.ivy2/cache/io.netty/netty-codec/jars/netty-codec-4.0.33.Final.jar:META-INF/io.netty.versions.propertie
【问题讨论】:
标签: merge sbt scalatest sbt-assembly