需要一个路径列表使SBT快乐



因此,在一个依赖关系中,我输入了无法逃脱的纠缠水平。我讨厌想到当我引入评论的罐子时会发生什么:

libraryDependencies ++= Seq(
//  "org.apache.avro" % "avro" % "1.8.1" excludeAll ExclusionRule(organization = "log4j"),
//  "org.apache.kafka" %% "kafka" % "0.10.0.0",
  "org.apache.hive" % "hive-jdbc" % "1.2.2"
    excludeAll ExclusionRule(organization = "log4j")
    exclude("org.apache.hadoop", "hadoop-yarn-api"),
  "log4j" % "log4j" % "1.2.16"
)

使用SBT组件,我会得到以下重复的问题:

[error] (*:assembly) deduplicate: different file contents found in the following:
[error] C:UsersG517329.ivy2cacheorg.datanucleusdatanucleus-api-jdojarsdatanucleus-api-jdo-3.2.6.jar:plugin.xml
[error] C:UsersG517329.ivy2cacheorg.datanucleusdatanucleus-corejarsdatanucleus-core-3.2.10.jar:plugin.xml
[error] C:UsersG517329.ivy2cacheorg.datanucleusdatanucleus-rdbmsjarsdatanucleus-rdbms-3.2.9.jar:plugin.xml

我卡住的地方试图找到一种合并策略,该策略使这三个罐子可以在一个胖罐中愉快地共存。我已经尝试了以下策略的几种变体,但没有取得任何进展:

assemblyMergeStrategy in assembly := {
  case PathList("javax", "transaction", xs @ _*) => MergeStrategy.first
  case PathList(xs @ _*) if xs.last endsWith "plugin.xml" => MergeStrategy.discard
  // case PathList("org", "datanucleus", "datanucleus-api-jdo", xs @ _*) => MergeStrategy.last
  // case PathList("org", "datanucleus", "datanucleus-rdbms", xs @ _*) => MergeStrategy.last
  case PathList("META-INF", xs @ _*) => MergeStrategy.discard
  case x =>
    val oldStrategy = (assemblyMergeStrategy in assembly).value
    oldStrategy(x)
}

我必须误解它的工作原理,因为在我看来,第二行应该在每个罐子中找到每个plugin.xml文件并将其核对。

是否有人成功地将Hive-JDBC包括在胖罐中?

更新:

case "plugin.xml" => MergeStrategy.discard //or .last应该起作用,但这会抛出:

[error] (*:assembly) java.util.NoSuchElementException

所以我今天早上加载了该项目,然后再尝试一下。这次

case "plugin.xml" => MergeStrategy.last

没有扔,我有一个胖罐。

guh。

更新:

我不知道问题所在(Intellij,SBT控制台,SBT组装(,但是有一些缓存的过程,这确实使对合并问题进行故障排除确实很难。我发现,确保对构建代码进行更改的唯一可靠方法实际上应用了整个IDE并重新打开。

最新更新