You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为仅适配Java8的Scala项目安全生成含多版本依赖的sbt胖JAR

处理sbt-assembly构建时Java多版本依赖的警告问题

我们有一个仅适配Java 8的Scala项目,依赖的库包含Java多版本(multi-release)依赖,使用sbt-assembly构建时会出现如下警告:

Fully-qualified classname does not match jar entry:
  jar entry: META-INF/versions/9/org/apache/logging/log4j/util/internal/DefaultObjectInputFilter.class
  class name: org/apache/logging/log4j/util/internal/DefaultObjectInputFilter.class
Omitting META-INF/versions/9/org/apache/logging/log4j/util/internal/DefaultObjectInputFilter.class.

解决方案

要跳过JVM 8不需要的META-INF/versions/*文件,只需在项目的sbt构建配置中添加自定义合并策略,过滤这些目录下的文件:

在build.sbt中加入以下配置:

assemblyMergeStrategy in assembly := {
  case PathList("META-INF", "versions", _, xs @ _*) => MergeStrategy.discard
  case x =>
    val oldStrategy = (assemblyMergeStrategy in assembly).value
    oldStrategy(x)
}

这段配置的作用是:匹配所有META-INF/versions/下的子目录及文件,直接丢弃它们;其余文件则沿用sbt-assembly默认的合并策略。

内容的提问来源于stack exchange,提问作者Klugscheißer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 20:35:16