通过 sbt 程序集构建时保留 Manifest.mf
Preserving Manifest.mf when building via sbt assembly
当我使用 sbt assembly
构建我的项目时,我得到 java.util.zip.ZipException: duplicate entry: META-INF/MANIFEST.MF
。 google 推荐的解决方案是使用 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 的评论中所述合并清单?
所以我最终这样做了:
- 分离 Scala 和 Java 项目
- 按原样构建 sbt 项目 - 将其复制到 java project/lib 目录
为 lib/scala 项目添加了一个系统 dep,并在构建 fatjar 时使用 add-jar 插件将此 jar 添加到类路径中:
<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>
构建 java 项目 fatjar 并部署它 - 它现在可以访问类路径上的 scala jar。
脚本(服务器是我做的java项目的名称):
sbt clean assembly
cp target/scala*/project*.jar server/lib
cd server
mvn clean install
cd ../
cp server/target/server*.jar target
当我使用 sbt assembly
构建我的项目时,我得到 java.util.zip.ZipException: duplicate entry: META-INF/MANIFEST.MF
。 google 推荐的解决方案是使用 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 的评论中所述合并清单?
所以我最终这样做了:
- 分离 Scala 和 Java 项目
- 按原样构建 sbt 项目 - 将其复制到 java project/lib 目录
为 lib/scala 项目添加了一个系统 dep,并在构建 fatjar 时使用 add-jar 插件将此 jar 添加到类路径中:
<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>
构建 java 项目 fatjar 并部署它 - 它现在可以访问类路径上的 scala jar。
脚本(服务器是我做的java项目的名称):
sbt clean assembly
cp target/scala*/project*.jar server/lib
cd server
mvn clean install
cd ../
cp server/target/server*.jar target