合并期间遇到的sbt程序集错误

时间:2016-10-04 10:51:23

标签: scala sbt

我尝试使用sbt程序集创建一个胖jar,我收到以下错误:

[warn] Merging 'org\eclipse\persistence\descriptors\copying' with strategy 'rename'
[warn] Merging 'META-INF\MANIFEST.MF' with strategy 'discard'
[warn] Merging 'META-INF\maven\commons-logging\commons-logging\pom.properties' with strategy 'discard'
[warn] Merging 'META-INF\maven\commons-logging\commons-logging\pom.xml' with strategy 'discard'
[warn] Merging 'META-INF\maven\javax.validation\validation-api\pom.properties' with strategy 'discard'
[warn] Merging 'META-INF\maven\javax.validation\validation-api\pom.xml' with strategy 'discard'
[warn] Merging 'META-INF\maven\joda-time\joda-time\pom.properties' with strategy 'discard'
[warn] Merging 'META-INF\maven\joda-time\joda-time\pom.xml' with strategy 'discard'
[warn] Merging 'META-INF\maven\org.apache.commons\commons-dbcp2\pom.properties' with strategy 'discard'
[warn] Merging 'META-INF\maven\org.apache.commons\commons-dbcp2\pom.xml' with strategy 'discard'
[warn] Merging 'META-INF\maven\org.apache.commons\commons-pool2\pom.properties' with strategy 'discard'
[warn] Merging 'META-INF\maven\org.apache.commons\commons-pool2\pom.xml' with strategy 'discard'
[warn] Merging 'META-INF\maven\org.glassfish\javax.json\pom.properties' with strategy 'discard'
[warn] Merging 'META-INF\maven\org.glassfish\javax.json\pom.xml' with strategy 'discard'
[warn] Merging 'META-INF\maven\org.joda\joda-convert\pom.properties' with strategy 'discard'
[warn] Merging 'META-INF\maven\org.joda\joda-convert\pom.xml' with strategy 'discard'
[warn] Merging 'META-INF\maven\org.slf4j\slf4j-api\pom.properties' with strategy 'discard'
[warn] Merging 'META-INF\maven\org.slf4j\slf4j-api\pom.xml' with strategy 'discard'
[error] 1 error was encountered during merge
[trace] Stack trace suppressed: run last *:assembly for the full output.
[error] (*:assembly) deduplicate: different file contents found in the following:
[error] C:\Documents and Settings\kp\.ivy2\cache\org.eclipse.persistence\javax.persistence\jars\javax.persistence-2.1.1.jar:META-INF/eclipse.inf
[error] C:\Documents and Settings\kp\.ivy2\cache\org.eclipse.persistence\commonj.sdo\jars\commonj.sdo-2.1.1.jar:META-INF/eclipse.inf

我的依赖是

Seq(
  "com.typesafe.akka" %% "akka-actor" % "2.3.15",
  "org.eclipse.persistence" % "eclipselink" % "2.6.2" % "provided" , 
  "org.scalikejdbc" %% "scalikejdbc" % "2.3.5",
  "org.scalaz" %% "scalaz-core" % "7.2.5"
)

问题的原因似乎是commonj.sdo-2.1.1.jar

2 个答案:

答案 0 :(得分:2)

如果相同的路径文件有不同的内容,则sbt-assembly会抛出错误。

您可以通过选择合并策略来避免或解决此错误。

在build.sbt

中添加以下代码
assemblyMergeStrategy in assembly := {
      case PathList("META-INF", "eclipse.inf") => MergeStrategy.last
      case x =>
        val oldStrategy = (assemblyMergeStrategy in assembly).value
        oldStrategy(x)
}

你应该看看https://github.com/sbt/sbt-assembly#merge-strategy

答案 1 :(得分:0)

您需要做的是定义程序的合并策略。

这里回答:assembly-merge-strategy issues using sbt-assembly