【问题标题】:Preserving Manifest.mf when building via sbt assembly通过 sbt 程序集构建时保留 Manifest.mf
【发布时间】:2018-06-11 07:40:43
【问题描述】:

当我使用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,它们似乎可以解决问题(filterDistinctLinesconcatfirstlast),它们都会导致构建失败并出现 @ 987654330@。唯一能编译的是discard,但这会导致程序在运行时崩溃,因为 Dropwizard 依赖于 mf 文件。

任何想法在这里做什么?有没有办法按照https://github.com/dropwizard/dropwizard/issues/455 的 cmets 中所述合并清单?

【问题讨论】:

    标签: scala sbt manifest sbt-assembly manifest.mf


    【解决方案1】:

    所以我最终这样做了:

    • 分离 Scala 和 Java 项目
    • 按原样构建 sbt 项目 - 将其复制到 java 项目/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。

    脚本(server是我做的java项目的名字):

    sbt clean assembly
    cp target/scala*/project*.jar server/lib
    cd server
    mvn clean install
    cd ../
    cp server/target/server*.jar target
    

    【讨论】:

      猜你喜欢
      • 2013-02-11
      • 1970-01-01
      • 2013-03-12
      • 2016-10-04
      • 2015-03-13
      • 2022-08-11
      • 1970-01-01
      • 1970-01-01
      • 2015-01-26
      相关资源
      最近更新 更多