假设我有一个包含一堆微服务的单一存储库,这些微服务形成了一个分布式系统。它们都是基于 JVM 的,并使用最新的 Gradle 作为构建系统。它不是具有多个模块的单个 Gradle 项目。每个应用程序都有自己的独立项目 (
settings.gradle.kts
),尽管它们与所谓的“传统 Gradle 插件”共享一些构建逻辑。
作为一名开发人员,我希望能够在 Intellij 中导入单个微服务项目,以防止 IDE 承担对整个代码库进行索引和重新索引的艰苦工作。没问题,因为每个微服务都是一个 Gradle 项目,所以我可以单独导入每个微服务。但当我再添加一项要求时,问题就出现了:“当我导入任何单个微服务/项目时,我想使用位于存储库根目录中的单个 Gradle 包装器”。
为什么?
gradle-wrapper.properties
)如果所有组件都位于同一个存储库中,存储库的根目录中应该只有一个 Gradle 包装器。如果您在那里构建了雨伞,则可以使用它来管理包装器。
在下一句 Gradle 文档中添加一个小障碍:
但是,如果您在 IDE 中导入单个组件,则在查找包装器时可能会出现问题,并且 您可能需要手动配置 Gradle 安装。
这正是我的问题所在。如何手动配置 Intellij 以将其指向正确的包装器?
如果我只在根目录中使用 Gradle 包装器(例如 Gradle 文档中的 this 非常说明性的构建组织示例),在终端中 我可以轻松地从根目录使用包装器,如下所示:
cd server-application
../gradlew :clean :build # note the '../'
但是如果我只想在 Intellij 中导入一个 Gradle 项目(不包含自己的
gradlew
文件):
*.gradle.kts
文件,然后 →“链接 Gradle 项目”上下文菜单选项...Intellij 不会从根开始使用包装器,而只会生成一个缺失的包装器,并将某些 Gradle 版本硬编码到当前的 Intellij 版本中。这种自动行为是完全符合预期的:如果包装器不在 Gradle 的项目根目录中(与
settings.gradle.kts
一起),则 Intellij 不知道包装器在哪里。所以,在这种情况下,我想配置 Intellij 将其指向右侧gradlew
,但我无法在 Intellij 中找到相应的设置。
是否可以在 Intellij 设置中的任何位置配置 Gradle 包装器的自定义位置?
基于 @romanv-jb 评论,目前无法在 Intellij 中为 Gradle 包装器配置自定义位置。
IDEA-332154 已创建功能请求。如果您也对此功能感兴趣,请点击链接并“竖起大拇指”。
就目前而言,如果您想硬固定 Intellij 使用的 Gradle 版本,同时您希望避免提交额外的非 root Gradle 包装器,只需在您的
build.gradle.kts
中使用以下 DSL:
tasks.wrapper {
distributionType = Wrapper.DistributionType.BIN
gradleVersion = "8.3"
}
完成上述包装器任务配置后,Intellij 会将您的项目导入到 IDE 中,并使用您明确指定的版本。