我已将以下jar添加到build.sbt
文件中,如下所示:
"com.amazonaws" % "aws-java-sdk" % "1.11.492"
发布此帖子,在合并过程中,出现以下错误:
[error] 1 error was encountered during merge
java.lang.RuntimeException: deduplicate: different file contents found in the following:
/home/jenkins-slave/.ivy2/cache/io.netty/netty-codec-http/jars/netty-codec-http-4.1.17.Final.jar:META-INF/io.netty.versions.properties
/home/jenkins-slave/.ivy2/cache/io.netty/netty-handler/jars/netty-handler-4.1.17.Final.jar:META-INF/io.netty.versions.properties
/home/jenkins-slave/.ivy2/cache/io.netty/netty-codec/jars/netty-codec-4.1.17.Final.jar:META-INF/io.netty.versions.properties
/home/jenkins-slave/.ivy2/cache/io.netty/netty-transport/jars/netty-transport-4.1.17.Final.jar:META-INF/io.netty.versions.properties
/home/jenkins-slave/.ivy2/cache/io.netty/netty-resolver/jars/netty-resolver-4.1.17.Final.jar:META-INF/io.netty.versions.properties
/home/jenkins-slave/.ivy2/cache/io.netty/netty-buffer/jars/netty-buffer-4.1.17.Final.jar:META-INF/io.netty.versions.properties
/home/jenkins-slave/.ivy2/cache/io.netty/netty-common/jars/netty-common-4.1.17.Final.jar:META-INF/io.netty.versions.properties
at sbtassembly.Assembly$.applyStrategies(Assembly.scala:143)
at sbtassembly.Assembly$.x$1$lzycompute$1(Assembly.scala:25)
at sbtassembly.Assembly$.x$1$1(Assembly.scala:23)
at sbtassembly.Assembly$.stratMapping$lzycompute$1(Assembly.scala:23)
at sbtassembly.Assembly$.stratMapping$1(Assembly.scala:23)...........
我已经尝试过为此提供许多解决方法:
1)在assemblyMergeStrategy
的{{1}}中添加了这一行:build.sbt
(尝试过case PathList("io", "netty", xs @ _*) => MergeStrategy.discard
和.last
)
2)在{{1}中的.first
中添加了这一行:assemblyMergeStrategy
(尝试过build.sbt
和case "META-INF\\io.netty.versions.properties" =>MergeStrategy.first
)
3)为排除依赖项中出现错误的净值罐添加了SBT排除规则,如下所示:
.last
以及上述的许多此类变体。这些解决方案均无法正常工作。
.discard
如下所示:
excludeDependencies ++= Seq(
SbtExclusionRule("io.netty", "netty-codec-http"),
SbtExclusionRule("io.netty", "netty-codec"),
SbtExclusionRule("io.netty", "netty-handler"),
SbtExclusionRule("io.netty", "netty-transport"),
SbtExclusionRule("io.netty", "netty-resolver"),
SbtExclusionRule("io.netty", "netty-buffer"),
SbtExclusionRule("io.netty", "netty-common")
)
请告知。
答案 0 :(得分:1)
您可以尝试以下操作:
<table class="table table-responsive table-stripped table-collapsed table-bordered">
<tr th:each="rows, rowStat : ${lists}">
<td th:text="${rowStat.count}"></td>
<td th:each="value: ${rows}" th:text="${value}"></td>
</tr>
</table>
或在最坏的情况下
assemblyMergeStrategy in assembly := {
case x if x.contains("io.netty.versions.properties") => MergeStrategy.discard
case x =>
val oldStrategy = (assemblyMergeStrategy in assembly).value
oldStrategy(x)
}
答案 1 :(得分:0)
如果检查文件的内容,则可以看到每个jar中都有不同的值,因此要正确执行程序集中的连接,可以合并这些文件以保留其中的所有属性。使用case "META-INF/io.netty.versions.properties" => MergeStrategy.concat
作为策略。
答案 2 :(得分:0)
寻找问题的解决方案后,我在sbt-assembly
存储库中找到了this issue。
它包含以下变通办法可以为我解决问题:
当外部依赖项被aws库的较早版本
"com.amazonaws" % "aws-java-sdk" % "1.11.80"
替换时,它可以工作,因为该库不包含META-INF/io.netty.versions.properties
的任何重复项。
我可以想象这对于需要最新版本的用户不起作用,但这至少是一些东西。
答案 3 :(得分:0)
由于多个版本的可用性,我认为您遇到此错误。要摆脱这种情况,您可以在build.sbt中尝试以下代码片段,然后尝试。
assemblyShadeRules装配中:= Seq(ShadeRule.rename(“ shapeless。**”->“ new_shapeless。@ 1”)。inAll)
答案 4 :(得分:0)
我在 windows 上遇到了同样的问题,发现解决方案应该是:
case PathList("META-INF", "io.netty.versions.properties") => MergeStrategy.first
或者把它放在 assemblyMergeStrategy 设置中,它将是:
assembly / assemblyMergeStrategy := {
case PathList("META-INF", "io.netty.versions.properties") => MergeStrategy.first
case x =>
val oldStrategy = (assembly / assemblyMergeStrategy).value
oldStrategy(x)
}
我认为问题中提到的解决方法不起作用的原因是:
io.netty.versions.properties
是 META-INF
下的文件,而不是 versions.properties
下名为 io/netty
的文件。所以这个与预期的文件不匹配:case PathList("io", "netty", xs @ _*) => MergeStrategy.discard
PathList
来匹配某些文件夹下的路径,而不是使用问题中显示的斜杠(带反斜杠) :case "META-INF\\io.netty.versions.properties" =>MergeStrategy.first
当我第一次遇到这个问题时,我使用了正斜杠,这也不起作用:
case "META-INF/io.netty.versions.properties" =>MergeStrategy.first
aws-java-sdk
需要 netty 依赖项才能工作。因此,将它们从依赖项中排除将使我们ClassNotFoundException
。这不能解决问题。