当前位置: 首页 > 知识库问答 >
问题:

在sbt 0.13中使用。sbt文件编写多项目构建的惯用方法

梁丘伟
2023-03-14

不过,我真正想要的是不要用一打子项目。sbt文件污染我的根。是否有一种方法可以将子项目build.sbt文件抛到它们各自的子目录中,在它们之间共享一些公共代码,然后为聚合子项目的整个项目创建一个根build.sbt?我现在在。Scala文件中有类似的设置,但如果可能的话,我更喜欢使用。sbt文件。

如果这是不可能的,那么用。sbt文件构建大型多项目构建的“正确”方法是什么?

共有1个答案

万俟皓
2023-03-14

在0.12中应该已经出现了这样的情况,您可以将.sbt文件放在子项目的基本目录中,其中的设置将包括在该项目的作用域中。

通过在项目/中创建一个普通的.scala文件,代码可以在.sbt文件之间重用。项目/中的代码可用于.sbt文件。一个.sbt中的定义对于其他.sbt文件是不可见的,至少在0.13中是如此。这主要是一个实现限制,目前还不确定这是否会在未来的版本中取消。

默认根项目将聚合所有子项目,包括来自subproject/build.sbt中定义的项目的子项目。

lazy val sub = project

但是,它不能引用/build.sbt中定义的任何内容。( /build.sbt 编译并计算后,才知道sub/build.sbt的存在。)因此,要显式定义sub聚合的内容,需要如下内容:

sub/build.sbt

lazy val sub = project.in(file(".")).aggregates(subSub)
//or: lazy val sub = project in file(".") aggregate subSub

lazy val subSub = project

但是,这重复了sub的定义。

lazy val sub = LocalProject("sub")
 类似资料:
  • 问题内容: 从历史上看,我曾使用Ant + Ivy或Maven来构建Java项目。我现在正在研究非基于XML的解决方案。 Gradle可以编译,修改和发布我的项目,几乎没有问题。 我可以对SBT做同样的事情吗?如果是这样,您能否提供一个使用sbt构建仅Java项目的简单示例。 问题答案: 是的,这完全有可能。完全不需要设置,一个小的build.sbt文件应该可以解决问题,例如: 并从命令行运行。

  • 我基本上是一个scala开发人员,最近我在scala-sbt中有一个项目,我开始使用kotlin,并尝试将我的代码的一些部分添加到kotlin中。我需要帮助理解gradle构建系统。数据库服务队列服务业务逻辑处理器代码取决于数据库服务、队列服务和业务逻辑上的项目。另一个项目“X”取决于队列服务和其他一些服务。通常在sbt中,这是一件非常直接的事情,您可以使用ProjectRef将这些项目作为依赖项

  • 嗨,我是sbt的新手,我正在学习这个教程http://www.scala-sbt.org/0.13/tutorial/Hello.html我在shell上遵循了相同的步骤,程序显示“嗨”,我很困惑,我的hello文件夹中没有这些文件 src/main/scala或src/main/java中的来源 src/test/scala或src/test/java中的测试 src/main/资源或src/t

  • 我在SBT中有一个多项目构建配置,由两个互不依赖的不同模块组成。它们只是(碰巧)属于同一产品。 项目布局如下: project/Build.scala包含常见设置,如下所示: 根构建文件 build.sbt 只需要将它们放在一起 [我也试图删除它... 最后是myProject_1/build.sbt[我刚刚省略了myProject_2/build.sbt,因为它非常相似,没有为主题提供任何附加价

  • 我是Gradle/AspectJ的新手,对此我有几个问题。我开发了一些库,将在其他项目中使用。我使用AspectJ实现了一些交叉逻辑,并且使用@Aspect创建了我的方面,而没有使用apectj特定的语言。这个lib是一个小框架,它提供了一些注释来使用它。我为我的类创建了单元测试。我知道要应用方面,我需要使用AspectJ编译器(“AJC”)编译类。在我的ide中,我使用option:-javaa

  • 在使用GradleV5.5.1的多项目构建中,我尝试将插件仅应用于某些子项目(如使用插件中所述)。您可以在这里看到,我试图将它应用于以结尾的子项目: 但是,它将其应用于我的项目(输出日志): 我做错了什么??