【发布时间】: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 就是这样设计的。完整地说,您可以使用他们称之为“复合构建”的帽子,但我认为它更多的是一种临时技巧,以避免在依赖项目中测试或调试某些功能时发布新版本。