我在 stackoverflow 中遵循了其他 sbt 程序集合并问题并添加了合并策略,但仍然没有得到解决。我添加了依赖树插件,但它没有显示传递库的依赖关系。我已经使用了 sbt 的最新合并策略,但是这个重复的内容问题仍然存在。
build.sbt:-
import sbtassembly.Log4j2MergeStrategy
name := ""
organization := "" // change to your org
version := "0.1"
scalaVersion := "2.11.8"
val sparkVersion = "2.1.1"
resolvers += "jitpack" at "https://jitpack.io"
resolvers += "bintray-spark-packages" at "https://dl.bintray.com/spark-packages/maven/"
resolvers += Resolver.url("artifactory", url("http://scalasbt.artifactoryonline.com/scalasbt/sbt-plugin-releases"))(Resolver.ivyStylePatterns)
resolvers += Resolver.url("bintray-sbt-plugins", url("http://dl.bintray.com/sbt/sbt-plugin-releases"))(Resolver.ivyStylePatterns)
resolvers +=Resolver.typesafeRepo("releases")
//addSbtPlugin("org.spark-packages" % "sbt-spark-package" % "0.2.6")
libraryDependencies ++= Seq(
("org.apache.spark" %% "spark-core" % "2.1.1" %"provided").
exclude("commons-beanutils", "commons-beanutils-core").
exclude("commons-collections", "commons-collections").
exclude("commons-logging", "commons-logging").
exclude("com.esotericsoftware.minlog", "minlog"),
("org.apache.spark" %% "spark-hive" % "2.1.1" %"provided").
exclude("commons-beanutils", …Run Code Online (Sandbox Code Playgroud) 即使使用简单的 Hello 程序,如果我在 build.sbt 文件中添加 play-json 作为库依赖项,当我在 sbt(sbt-assemble 插件)中执行“assemble”命令时,我总是会收到合并错误。
[error] stack trace is suppressed; run last assembly for the full output
[error] (assembly) deduplicate: different file contents found in the following:
[error] /home/heitor/.cache/coursier/v1/https/repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-annotations/2.10.1/jackson-annotations-2.10.1.jar:module-info.class
[error] /home/heitor/.cache/coursier/v1/https/repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-core/2.10.1/jackson-core-2.10.1.jar:module-info.class
[error] /home/heitor/.cache/coursier/v1/https/repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-databind/2.10.1/jackson-databind-2.10.1.jar:module-info.class
[error] /home/heitor/.cache/coursier/v1/https/repo1.maven.org/maven2/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.10.1/jackson-datatype-jdk8-2.10.1.jar:module-info.class
[error] /home/heitor/.cache/coursier/v1/https/repo1.maven.org/maven2/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.10.1/jackson-datatype-jsr310-2.10.1.jar:module-info.class
Run Code Online (Sandbox Code Playgroud)
MergeApp.scala
object MergeApp extends App {
println("Hello")
}
Run Code Online (Sandbox Code Playgroud)
构建.sbt
name := "MergeBug"
version := "0.1"
scalaVersion := "2.13.1"
val playJsonVersion = "2.8.1"
libraryDependencies ++= Seq("com.typesafe.play" %% "play-json" % playJsonVersion)
Run Code Online (Sandbox Code Playgroud)
项目/build.properties
sbt.version = 1.3.8
Run Code Online (Sandbox Code Playgroud)
项目/plugins.sbt
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.10")
Run Code Online (Sandbox Code Playgroud) 我在sbt构建Scala项目(重复输入 :)时遇到问题,META-INF/MANIFEST.MF以下几行代码解决了该问题:
assemblyMergeStrategy in assembly := {
case PathList("META-INF", xs @ _*) =>
(xs map {_.toLowerCase}) match {
case ("manifest.mf" :: Nil) | ("index.list" :: Nil) | ("dependencies" :: Nil) => MergeStrategy.discard
case _ => MergeStrategy.last
}
}
Run Code Online (Sandbox Code Playgroud)
我现在试图理解在上述情况下双冒号的含义。我在Quora中找到了答案,但这没有帮助。
而且,我是Scala的新手,但实际上并没有帮助。
编辑:
看到答案后,我仍然不明白为什么,因为我们正在创建列表,因此以下内容不起作用(重复的manifest.mf条目不会被丢弃):
case List("manifest.mf", "index.list", "dependencies") => MergeStrategy.discard
Run Code Online (Sandbox Code Playgroud)
以下内容也不会:(错误:)')' expected but '=>' found.:
case List("manifest.mf") | List(("index.list") | List("dependencies") => MergeStrategy.discard
Run Code Online (Sandbox Code Playgroud)
编辑2:
卸下额外的支架可完成以下工作:
case List("manifest.mf") | List("index.list") | List("dependencies") …Run Code Online (Sandbox Code Playgroud) 执行任务“Assembly”失败并显示[error] (assembly) java.nio.file.InvalidPathException: Trailing char < > at index 121: C:\Users\IdeaProjects\GlobalConfigEditor\target\scala-2.13\GlobalConfigEditor-SettingKey(This \ This \ This。
构建.sbt
name := "GlobalConfigEditor"
version := "0.3"
scalaVersion := "2.13.1"
mainClass in assembly := Some("globalconfig.ConfigEditorApplication")
assemblyJarName in assembly := s"GlobalConfigEditor-$version.jar"
assemblyMergeStrategy in assembly := {
case PathList("META-INF", xs@_*) => MergeStrategy.discard
case PathList("reference.conf") => MergeStrategy.concat
case x => MergeStrategy.first
}
libraryDependencies += "org.apache.commons" % "commons-lang3" % "3.9"
libraryDependencies += "commons-io" % "commons-io" % "2.6"
libraryDependencies += "ch.qos.logback" % "logback-classic" % "1.2.3"
libraryDependencies += "com.typesafe.scala-logging" …Run Code Online (Sandbox Code Playgroud)