【问题标题】:Mutli-projects build with gradle like sbt使用 sbt 之类的 gradle 构建多项目
【发布时间】:2020-01-06 23:24:29
【问题描述】:

我基本上是一名 scala 开发人员,并且我在 scala 中有项目 - sbt 最近我开始使用 kotlin 并尝试将我的部分代码放入 kotlin。我需要帮助来理解 gradle 构建系统。 数据库服务 队列服务 商业逻辑 处理器代码依赖于数据库服务、队列服务和业务逻辑上的项目 另一个项目“X”依赖于队列服务和其他一些服务。 通常在 sbt 中这是非常直接的,您可以使用 ProjectRef 将这些项目作为依赖项包含在内。 我如何用 gradle 达到同样的效果?提前致谢

//更新 示例 build.sbt

lazy val buildSettings = Seq(
  scalaVersion := "2.12",
  fork in Test := true,
  fork in IntegrationTest := true,
  ...
)

lazy val root = Project("processor-code", file("."))
  .settings(buildSettings: _*)
  .settings(
    libraryDependencies ++= //Deps
  )
  .dependsOn(db-service, queue-service, utilities)
  .aggregate(db-service, queue-service, utilities)

  lazy val db-service = ...

  lazy val queue-service = Project("queue-service", file(".")).settings()...

  lazy val utilities = ProjectRef(file("../utilities"), "utilities")

我已尝试将项目包含在 settings.gradle 中

include 'project'
project(":project").projectDir = "../myProject"

并添加

implementation(project(":project"))

但是,在类路径上显示错误插件似乎不起作用,然后我也尝试创建一个子模块,它似乎正在工作,但是当我尝试运行它时会抛出 initialization exception

我了解到我们可以在以下场景中配置一个项目

Root project: (contains common build.gradle)
| - subproject A
| - subproject B
| - myapp

现在 myapp 可以轻松依赖子项目

我的场景(没有通用的build.gradle,每个项目都会有自己的build.gradle)

| Independent project A
| Independent project B
| my app

【问题讨论】:

  • 请发布您的 SBT 配置,以便可以为您提供帮助。
  • docs.gradle.org/current/userguide/…。如果您需要有关错误的帮助,您必须发布项目结构、构建脚本以及准确和完整的错误消息。
  • 你只能依赖另一个项目,如果它是同一个多项目构建的另一个项目。如果它们是完全独立的,那么每个项目都应该将其工件发布到 maven 存储库,并从那里获取其依赖项。
  • @JBNizet 为什么会这样?有什么具体原因吗?
  • 之所以如此,是因为 Gradle 就是这样设计的。完整地说,您可以使用他们称之为“复合构建”的帽子,但我认为它更多的是一种临时技巧,以避免在依赖项目中测试或调试某些功能时发布新版本。

标签: scala gradle kotlin sbt


【解决方案1】:

虽然您确实只能依赖其他子项目,但从技术上讲,这仍然可以使用 Gradle。

由于project A 是一个Gradle 项目,您可以使用gradle jar 命令打包它。然后,您可以将生成的 JAR 移动到您想要的任何位置,但可能会移动到您的 my app 项目。

现在可以使用 project.exec {} 从 Gradle 启动任意命令

此外,您甚至可以在 Gradle 中编写自己的 Kotlin/Groovy 函数来为您完成这项工作。

实际上,这正是 SBT 为您所做的。

【讨论】:

    猜你喜欢
    • 2012-06-24
    • 2015-03-11
    • 2011-10-30
    • 1970-01-01
    • 2015-04-26
    • 2017-10-19
    • 2014-12-04
    • 2018-11-18
    • 2013-12-20
    相关资源
    最近更新 更多