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

如何从Scala 3项目构建无需安装Scala的EXE或胖JAR?

Scala 3 构建独立可执行二进制文件方案

需求说明

  • 构建可在仅安装Java的机器上运行的程序,目标机器无需安装Scala(由开发端控制Scala版本)
  • 无需制作安装程序,支持频繁更新替换文件
  • 项目主文件路径:/src/main/scala/main.scala,代码如下:
@main
def main(): Unit =

当前build.sbt配置:

ThisBuild / version := "0.1.0-SNAPSHOT"

ThisBuild / scalaVersion := "3.3.1"

lazy val root = (project in file("."))
  .settings(
    name := "foo",
    libraryDependencies += "org.scala-lang.modules" %% "scala-parser-combinators" % "2.2.0",
    libraryDependencies += "org.scala-lang.modules" %% "scala-xml" % "2.1.0",
    libraryDependencies += "com.lihaoyi" %% "os-lib" % "0.9.1",
    libraryDependencies += "com.lihaoyi" %% "requests" % "0.8.0",
    libraryDependencies += "org.scalatest" %% "scalatest" % "3.2.15" % Test,
  )

scalacOptions ++= Seq("-deprecation", "-feature")

实现方案:使用sbt-assembly打包Fat Jar

最简便的方式是用sbt-assembly插件,它会将你的代码、所有依赖(包括Scala标准库)打包成一个独立的Jar文件(Fat Jar),只需Java环境即可运行,完全满足你的需求。

步骤1:添加sbt-assembly插件

在项目根目录下创建project/plugins.sbt文件,添加以下内容:

addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "2.1.1")

步骤2:配置build.sbt

在root项目的settings中添加assembly相关配置,处理重复文件冲突并适配Scala 3的主类生成规则:

lazy val root = (project in file("."))
  .settings(
    // 原有配置保持不变
    name := "foo",
    libraryDependencies += "org.scala-lang.modules" %% "scala-parser-combinators" % "2.2.0",
    libraryDependencies += "org.scala-lang.modules" %% "scala-xml" % "2.1.0",
    libraryDependencies += "com.lihaoyi" %% "os-lib" % "0.9.1",
    libraryDependencies += "com.lihaoyi" %% "requests" % "0.8.0",
    libraryDependencies += "org.scalatest" %% "scalatest" % "3.2.15" % Test,
    // 添加assembly配置
    assemblyMergeStrategy in assembly := {
      case PathList("META-INF", xs @ _*) => MergeStrategy.discard
      case x => MergeStrategy.first
    },
    // Scala 3的@main会自动生成主类,插件可自动检测,若需手动指定可取消下面注释
    // mainClass in assembly := Some("main")
  )

步骤3:执行打包命令

在项目根目录运行:

sbt assembly

打包完成后,独立Jar文件会生成在target/scala-3.3.1/foo-assembly-0.1.0-SNAPSHOT.jar(名称根据你的项目名和版本自动调整)。

步骤4:运行程序

在目标机器上,只需执行以下命令即可运行(确保已安装Java):

java -jar foo-assembly-0.1.0-SNAPSHOT.jar

方案优势

  • 目标机器无需安装Scala,所有依赖(包括Scala核心库)都封装在Jar中
  • 更新时仅需替换Jar文件,无需安装程序,适配频繁更新场景
  • 配置和操作流程简单,符合快速迭代需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 20:08:34