如何使用 scala sbt 构建多个 jar 文件

Posted

技术标签:

【中文标题】如何使用 scala sbt 构建多个 jar 文件【英文标题】:How do I build multiple jar files using scala sbt 【发布时间】:2011-09-15 22:13:11 【问题描述】:

在我的项目中,我有以下结构:

src/

插件/

\__ mpc

|__ 操作

我将 src 中的所有 scala 文件编译成一个 jar(主程序),然后 plugins 中的每个子目录都包含 scala 文件,这些文件应该构建一个由主程序加载的插件 jar(所以一个 jar 用于 plugins/ mpc 和另一个用于插件/操作)。

在根目录下我有一个 build.sbt:

名称 := "mrtoms"

组织 := "chilon"

版本 := "0.1"

libraryDependencies ++= Seq("commons-httpclient" % "commons-httpclient" % "3.1")

crossPaths := false

scalaHome := Some(file("/usr/share/scala"))

目标 := 文件(“项目/目标”)

编译中的scalaSource

mainClass := Some("org.chilon.mrtoms.MrToms")

从 src 中的文件构建我的主 jar 文件就好了。如何在每个插件目录中为源文件添加 jars?

【问题讨论】:

【参考方案1】:

看来您需要完整配置(目前您使用的是基本配置):

https://github.com/harrah/xsbt/wiki/Full-Configuration

在您的情况下,root 项目是您的主要 jar。然后每个插件都应该有它自己的项目,根项目聚合。完整的配置可以是这样的:

import sbt._

object MyBuild extends Build 
    lazy val root = Project("root", file(".")) aggregate (mpc, oper) 
    lazy val mpc  = Project("mpc", file("plugins/mpc")) dependsOn(pluginApi)
    lazy val oper = Project("sub2", file("plugins/oper")) dependsOn(pluginApi)
    lazy val pluginApi = Project("pluginApi", file("plugins/api"))

【讨论】:

非常感谢您的帮助:) 在我的情况下,我添加了 root.. 它什么都不编译.. 只是为了聚合到子项目。然后所有的子项目都依赖于那里的插件子项目。根项目构建了一个空 jar,scala 编译器在第一次编译时不断给出“内存不足”警告;)但除此之外它看起来不错。 似乎文档在此期间已经移动(并希望变得更好)。 scala-sbt.org/release/tutorial/Full-Def.html 或者这个:scala-sbt.org/0.13/tutorial/Multi-Project.html

以上是关于如何使用 scala sbt 构建多个 jar 文件的主要内容,如果未能解决你的问题,请参考以下文章

使用 scala sbt 构建一个独立的 jar 以合并到一个 android 项目中

如何从scala对象中的sbt ProjectPlugin.scala加载对象

Sbt 0.13 插件依赖和 scala-reflect.jar 版本冲突

sbt 无法为 scala 版本 2.11.12 创建 jar

使用 sbt 运行多个应用程序

运行使用 SBT 和 ProGuard 构建的独立 jar 时出现 AbstractMethodError