SBT 打jar包忽略某些类的代码

本文探讨了为何大部分程序员难以转型成为架构师的原因,并通过具体的代码片段展示了一些相关技术细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mappings in(Compile, packageBin) ~= { (ms: Seq[(File, String)]) =>
  ms filter { case (file, toPath) =>
    !toPath.startsWith("router/") &&
      !Set(
        "routes"
        , "controllers/routes.class"
        , "controllers/routes$javascript.class"
      ).contains(toPath)
  }
}

转载于:https://my.oschina.net/morven/blog/1531488

### 使用 SBT 工具构建和生成 JAR 文件的操作流程 #### 1. 默认 `sbt package` 的功能与局限性 `sbt package` 是 SBT 提供的一个基本命令,用于将项目的资源文件和编译后的文件打成一个标准的 JAR 文件[^3]。然而,默认情况下它不会含所有的依赖库,也不会自动生成带有主清单属性(Main-Class)的 MANIFEST 文件。因此,当尝试通过 `java -jar xxx.jar` 运行时会报错:“xxx.jar中没有主清单属性”[^1]。 #### 2. 配置主以支持可执行 JAR 文件 为了使生成的 JAR 文件可以作为独立的应用程序运行,需要指定主(即含 `main` 方法的入口点)。这可以通过修改 `build.sbt` 文件来实现: ```scala // 定义主路径 mainClass in (Compile, packageBin) := Some("com.example.MainApp") ``` 上述代码中的 `"com.example.MainApp"` 应替换为实际的主全限定名。这样设置后,SBT 会在生成的 JAR 文件中自动添加正确的 MANIFEST 条目。 #### 3. 使用 `sbt-assembly` 插件解决依赖问题 如果希望生成一个含所有依赖项的“胖 JAR”(fat JAR),则推荐使用 `sbt-assembly` 插件。以下是具体步骤: ##### (1)安装插件 在项目的根目录下创建或编辑 `project/plugins.sbt` 文件,加入以下内容: ```scala addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.15.0") // 版本号可能随时间更新 ``` ##### (2)配置 Assembly 设置 同样在 `build.sbt` 文件中添加如下配置: ```scala import AssemblyKeys._ assembly / mainClass := Some("com.example.MainApp") assemblyMergeStrategy in assembly := { case PathList("META-INF", xs @ _*) => MergeStrategy.discard case x => MergeStrategy.first } ``` 这里的关键部分是定义了合并策略,特别是对于重复的 META-INF 文件进行了处理,避免冲突发生。 ##### (3)生成 Fat JAR 完成以上配置后,只需运行以下命令即可生成完整的可执行 JAR 文件: ```bash sbt clean assembly ``` 最终生成的 JAR 文件通常位于 `target/scala-<version>/` 目录下,并可以直接通过 `java -jar` 命令启动应用。 #### 4. IntelliJ IDEA 中的辅助操作 如果你正在使用 IntelliJ IDEA 开发 Scala 项目,则也可以借助 IDE 的图形界面简化某些步骤。例如,按照引用描述的方法打开项目结构对话框 (`Ctrl+Alt+Shift+S`) 并调整模块输出选项,虽然这种方法更适合于简单的场景或者调试用途[^2]。 --- ### 总结 综上所述,要成功地用 SBT 构建并生成适合分发和部署的 JAR 文件,建议优先考虑采用 `sbt-assembly` 插件的方式,因为它能够很好地应对复杂的多依赖环境需求。同时合理配置 build 文件内的参数如 Main Class 和 merge strategy 对整个过程至关重要。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值