【问题标题】:Fail to override Assembly Merge Strategy in multi-jvm node test在多 jvm 节点测试中无法覆盖程序集合并策略
【发布时间】: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

根据这个讨论,最好将合并策略定义为解决方案:

https://groups.google.com/a/lists.datastax.com/forum/#!msg/spark-connector-user/5muNwRaCJnU/sIHYh6PFEwAJ

不幸的是,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


    【解决方案1】:

    它对您不起作用,因为在您的代码中您覆盖了sbt-assembly 任务的设置。

    您需要做的是在 sbt-multi-jvm 插件的上下文中覆盖 sbt-assembly 的设置。

    你可以这样做:

    assemblyMergeStrategy in assembly in MultiJvm := {
      case x if x.endsWith("META-INF/io.netty.versions.properties") ⇒ MergeStrategy.first
    }
    

    【讨论】:

      【解决方案2】:

      这些文件有不同的内容,我认为将它们连接起来并没有什么坏处:

      assemblyMergeStrategy in assembly  := {
        case PathList("META-INF", "io.netty.versions.properties") =>
          MergeStrategy.concat
        case x =>
          val oldStrategy = (assemblyMergeStrategy in assembly).value
          oldStrategy(x)
      }
      

      然后看内容:

      unzip -p YOUR_ASSEBMBLY.jar "META-INF/io.netty.versions.properties"
      

      【讨论】:

        猜你喜欢
        • 2017-09-19
        • 1970-01-01
        • 1970-01-01
        • 2021-06-05
        • 1970-01-01
        • 2016-09-28
        • 1970-01-01
        • 2023-02-20
        • 2016-06-15
        相关资源
        最近更新 更多