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

如何用SBT生成含Class-Path清单的瘦JAR?兼容Google Cloud Functions

生成兼容Google Cloud Functions的SBT瘦JAR方案

方案1:使用sbt-native-packager(推荐)

sbt-native-packager的JavaAppPackaging插件可以自动生成瘦JAR并配置好依赖路径,完美适配GCF的要求。

配置步骤

  1. 在project/plugins.sbt添加插件:
addSbtPlugin("com.github.sbt" % "sbt-native-packager" % "1.9.16")
  1. 在build.sbt中启用插件并配置:
enablePlugins(JavaAppPackaging)

// 指定你的Cloud Function主类
mainClass := Some("com.yourpackage.YourFunctionClass")

// 配置MANIFEST.MF的Class-Path,指向同级lib目录下的依赖
packageOptions += Package.ManifestAttributes(
  "Class-Path" -> dependencyClasspath.value.map(attr => s"lib/${attr.data.getName}").mkString(" ")
)

// 将依赖打包到lib目录
mappings in Universal ++= dependencyClasspath.value.map(attr => attr.data -> s"lib/${attr.data.getName}")

执行sbt universal:packageBin,解压生成的zip包后,lib目录存放所有依赖JAR,同级的瘦JAR已配置好正确的Class-Path。

方案2:调整sbt-assembly配置生成瘦JAR

如果你已经在用sbt-assembly,只需修改配置就能生成符合要求的瘦JAR:

配置步骤

  1. 确保project/plugins.sbt已添加插件:
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "1.2.0")
  1. 在build.sbt中配置:
// 生成仅包含自身代码的瘦JAR,排除依赖
assemblyOption in assembly := (assemblyOption in assembly).value.copy(includeDependency = false)

// 自定义MANIFEST.MF,添加Class-Path和主类信息
packageOptions in assembly += Package.ManifestAttributes(
  "Class-Path" -> dependencyClasspath.value.map(_.data.getName).mkString(" "),
  "Main-Class" -> "com.yourpackage.YourFunctionClass"
)

// 合并策略:丢弃原有MANIFEST,保留自定义配置
assemblyMergeStrategy in assembly := {
  case PathList("META-INF", "MANIFEST.MF") => MergeStrategy.discard
  case _ => MergeStrategy.first
}

执行sbt assembly后,瘦JAR会生成在target/scala-<your-scala-version>目录下。需要将所有依赖JAR放在和瘦JAR同级的目录(或按Class-Path配置的路径放置),再一起上传到GCF。

GCF兼容注意事项

  • 确保你的主类实现了GCF要求的接口(如HttpFunction或BackgroundFunction)。
  • Class-Path中的依赖文件名必须和实际上传的文件完全一致,GCF会根据该路径加载依赖。
  • 上传时可选择将瘦JAR和依赖JAR放在同一目录,或者将依赖放在lib目录并调整Class-Path前缀为lib/。

内容的提问来源于stack exchange,提问作者angelcervera

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 03:52:37