当我使用sbt assembly
构建项目时,我得到java.util.zip.ZipException: duplicate entry: META-INF/MANIFEST.MF
。谷歌推荐的解决方案是使用MergeStrategy.discard
。
这有助于构建项目 - 但它在运行时崩溃,因为Dropwizard(依赖项)依赖于manifest.mf中包含的信息(完整的问题详细信息:https://github.com/dropwizard/dropwizard/issues/455)。
遇到该错误时的建议是合并清单。
我已经尝试过Manifest.MF上的所有MergeStrategies,看起来他们就是这样做的(filterDistinctLines
,concat
,first
,last
),他们所有导致构建失败的java.util.zip.ZipException: duplicate entry: META-INF/MANIFEST.MF
。唯一编译的是discard
,但由于Dropwizard依赖于mf文件,导致程序在运行时崩溃。
任何想法在这做什么?有没有办法合并清单,如https://github.com/dropwizard/dropwizard/issues/455的评论中所述?
答案 0 :(得分:0)
所以我最终这样做了:
为lib / scala项目添加了一个系统dep,并在构建fatjar时使用add-jar插件将此jar添加到类路径中:
sed '/^<Element TheSearchedElement>$/,\@^</Element>@{/second/s/content/repl/; }' input
构建java项目fatjar并进行部署 - 它现在可以访问类路径上的scala jar。
脚本(服务器是我制作的java项目的名称):
<plugin>
<groupId>com.googlecode.addjars-maven-plugin</groupId>
<artifactId>addjars-maven-plugin</artifactId>
<version>1.0.5</version>
<executions>
<execution>
<goals>
<goal>add-jars</goal>
</goals>
<configuration>
<resources>
<resource>
<directory>${real.base.dir}/lib</directory>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>