sbt定义子项目的标准方式是把子项目放在父项目的目录下,然后在父项目的Build.scala中定义子项目及其依赖关系。但这种方式要求把子项目放在父项目目录下这一点非常不爽,特别是如果某个子项目要在多个独立项目间共享时。这种方法这里就不说了,如果不想把子项目放在父项目目录下,sbt还提供了另外两种方法。
第一种方法称为项目引用。假如有一个commonsub子项目,放在/some/place/commonsub下,主项目放在/another/place/mainProject下,这两个目录完全不相关,那在主项目中就可以这样引用commonsub:
lazy val common = RootProject( file("/some/place/commonsub") )
……
val main = Project("main", file(".")) dependsOn(common)
实现起来很简单,只是把Project换成了RootProject,如果你要引用的是commonsub下的一个子项目,如commonsub-sub,也就是子子项目,那把RootProject换成ProjectRef就行了,RootProject、ProjectRef甚至可以引用一个git仓库或一个已经打好包的jar,具体请参考
sbt文档。需要注意的一点是,引用外部项目的时候,在主项目中,要设置好sbt.boot.directory这个环境变量,在你的sbt启动脚本中设置好就行了。
最后一种方式是把子项目打包发布,然后在主项目是加上对子项目的依赖,所以严格说起来,其实不是定义子项目,但是确实可以工作。sbt可以把项目打包发布到一个maven或ivy仓库,这个仓库可以是远程的,也可以是本地的。为了方便,假如要把commonsub发布到本地,那么在commonsub的项目定义中加上:
publishTo := Some(Resolver.file("file", new File(Path.userHome.absolutePath+"/.m2/repository"))) //或者任何其它的地方
然后在sbt shell中执行publish命令,就可以把commonsub打包发布到指定的地方了,上面的代码中是设定发布到maven本地仓库,你也可以指定成任何其它的目录。然后要在主项目中增加对commonsub的依赖:
resolvers += "Local Maven Repository" at "file://"+Path.userHome.absolutePath+"/.m2/repository"
libraryDependencies += "com.yourCompany" % "commonsub" % "X.X.X"
这种方式相对麻烦一些,另外还需要注意一点的是,两个项目要用相同的scala版本编译,因为不同的scala版本编译的结果可能是不兼容的。
不管哪种方式,都别忘记在项目更新时更新对子项目的引用,第二种方式中需要你自己checkout对应版本的源码,第三种方法需要你显式的定义依赖于哪个版本的子项目,比较而言,这种方式相对不容易遗忘些。
分享到:
相关推荐
3. **项目结构**:SBT支持多项目构建,一个顶级的`build.sbt`可以定义多个子项目,每个子项目都有自己的配置。这种结构适合大型工程,可以更好地组织代码。 4. **命令行接口**:SBT提供了一个交互式的命令行界面,...
例如,它可以处理多个子项目在一个顶层项目下,每个子项目都有自己的构建设置和依赖。 4. **任务与命令**:SBT的任务是构建过程中的操作,如`compile`(编译代码)、`test`(运行测试)和`run`(运行应用程序)。...
4. 多项目构建:一个SBT构建可以包含多个子项目,每个子项目有自己的构建设置,便于大型工程管理。 5. 自动重载:在开发过程中,SBT可以自动检测源文件变化并重新编译,无需手动触发。 总之,SBT-1.5.3是一个强大且...
- **多项目构建**:一个SBT构建可以管理多个子项目,便于大型项目管理。 - **远程控制**:通过sbt-server,可以远程控制SBT进程,进行自动化构建和部署。 **5. 性能优化** - **Global Settings**:用户可以通过全局...
4. **多项目构建**:在一个SBT项目中,可以管理多个子项目,每个子项目有自己的构建设置和依赖。通过`aggregate`和`dependsOn`关键字,可以指定项目的依赖关系和聚合关系。 5. **交互式Shell**:SBT提供了一个交互...
- **项目结构**: SBT支持多项目构建,可以轻松管理大型复杂项目中的多个子项目。 - **交互式命令行**: SBT提供了命令行界面,开发者可以直接在命令行中执行各种构建任务,如编译、运行、测试等。 **2. 使用SBT的...
3. **多模块项目**:SBT支持构建包含多个子项目的大型工程,每个子项目可以有自己的构建定义。 ### 六、常见问题与解决 1. **网络问题**:如果下载依赖时遇到网络问题,可以设置代理或者使用本地的ivy仓库。 2. **...
Ivy2 是 SBT 使用的一个依赖管理系统,它是 Apache Ant 的一个子项目,负责处理外部库的依赖关系。 标题中的“SBT ivy2 scala构建工具boot包”指的是 SBT 配合 Ivy2 实现的 Scala 项目的构建启动包。这个包通常包含...
SBT的核心概念之一是构建定义,它使用一种叫做“构建定义语言”(Build Definition Language)的Scala代码来描述项目结构、依赖关系、任务和构建过程。这使得SBT能够灵活地处理复杂的项目构建需求,并且可以利用...
- **项目管理**:SBT支持多项目构建,可以同时管理多个相互依赖的子项目。 - **依赖管理**:SBT通过 Ivy 库管理外部依赖,自动下载并解决依赖冲突。 - **构建过程**:包括编译、测试、打包、发布等,可以自定义...
每个子项目都有自己的 `build.sbt` 文件,可以在顶层 `build.sbt` 中通过 `aggregate` 和 `dependsOn` 关键字来定义它们之间的关系。 **命令行交互** sbt 提供了一个交互式的命令行界面,可以通过输入命令来控制...
1. **项目管理**:SBT可以管理多个相互依赖的子项目,每个项目有自己的构建设置。 2. **依赖管理**:通过Maven仓库自动下载和管理项目依赖,支持Scala和Java的库。 3. **编译**:自动编译源代码,支持增量编译以提高...
3. `build.sbt`:SBT的构建配置文件,定义了项目的依赖、版本和其他构建设置。 4. `README.md`:提供项目介绍、安装和使用指南。 5. `LICENSE`:可能包含该项目的开源许可信息。 6. `.gitignore`:定义了版本控制...
一个项目可以包含多个子项目,每个项目都有自己的依赖关系和构建设置。任务则定义了构建过程中的具体操作,如编译源代码、运行测试或打包应用程序。这种模型使得SBT能够处理复杂的多模块项目,并且提供了高度的可...
10. **跨项目构建**:SBT 支持多项目构建,可以在单个 SBT 工作空间中管理多个相互依赖的子项目。 总之,`sbt-launch.jar 1.2.8` 是 SBT 构建流程中的关键组件,配合 `sbt其他下载地址.txt` 提供的资源,开发者可以...
2. **多模块项目**: SBT支持多模块项目,可以在同一个项目中定义多个子项目,每个子项目有自己的`build.sbt`文件,方便组织复杂项目结构。 3. **构建任务**: 可以自定义构建任务,例如编译、打包、发布等,只需在`...
1. **sbt**: Simple Build Tool 是 Scala 项目的主要构建工具,它允许开发者以声明式方式定义项目依赖、任务和构建过程。sbt 使用 Ivy 库管理这些依赖,Ivy 是 Apache 提供的一个通用的依赖管理和构建工具。 2. **...
8. **工作区管理**:sbt支持多项目构建,可以在一个工作区中管理多个相互依赖的子项目。 **Linux环境下的安装与使用:** 1. **安装Java**:sbt依赖Java运行,因此在使用前需要确保系统已安装Java JDK。 2. **安装...
在父项目的`build.sbt`中,我们可以定义通用设置和跨模块的依赖,同时也可以通过`aggregate`关键字来包括子项目,使得执行命令如`compile`或`test`时会一起处理所有子项目。 为了仅为子项目创建JAR工件,我们需要在...
在 `sbt-multi-project-example` 示例中,我们可以学习如何设置子项目的构建路径,如何管理跨项目的依赖,以及如何利用 `sbt-assembly` 打包所有代码和依赖到一个可执行的 JAR 文件。这对于理解和实践 Scala 大型...