如何配置 Intellij 以从项目根目录以外的目录使用 Gradle 包装器?

问题描述 投票:0回答:1

假设我有一个包含一堆微服务的单一存储库,这些微服务形成了一个分布式系统。它们都是基于 JVM 的,并使用最新的 Gradle 作为构建系统。它不是具有多个模块的单个 Gradle 项目。每个应用程序都有自己的独立项目 (

settings.gradle.kts
),尽管它们与所谓的“传统 Gradle 插件”共享一些构建逻辑。

作为一名开发人员,我希望能够在 Intellij 中导入单个微服务项目,以防止 IDE 承担对整个代码库进行索引和重新索引的艰苦工作。没问题,因为每个微服务都是一个 Gradle 项目,所以我可以单独导入每个微服务。但当我再添加一项要求时,问题就出现了:“当我导入任何单个微服务/项目时,我想使用位于存储库根目录中的单个 Gradle 包装器”。

为什么?

  • 因为我不想在我的 monorepo 中包含多个 Gradle 包装器的二进制文件
  • 因为我想要一个声明 Gradle 版本的地方(仓库根目录的
    gradle-wrapper.properties
  • 并且因为基于 Gradle 文档,这是推荐的方法:

如果所有组件都位于同一个存储库中,存储库的根目录中应该只有一个 Gradle 包装器。如果您在那里构建了雨伞,则可以使用它来管理包装器。

在下一句 Gradle 文档中添加一个小障碍:

但是,如果您在 IDE 中导入单个组件,则在查找包装器时可能会出现问题,并且 您可能需要手动配置 Gradle 安装

这正是我的问题所在。如何手动配置 Intellij 以将其指向正确的包装器?

如果我只在根目录中使用 Gradle 包装器(例如 Gradle 文档中的 this 非常说明性的构建组织示例),在终端中 我可以轻松地从根目录使用包装器,如下所示:

cd server-application
../gradlew :clean :build # note the '../'

但是如果我只想在 Intellij 中导入一个 Gradle 项目(不包含自己的

gradlew
文件):

  • 通过在 Intellij 中打开单个子目录
  • 或者取消链接根伞项目并右键单击项目的
    *.gradle.kts
    文件,然后 →“链接 Gradle 项目”上下文菜单选项

...Intellij 不会从根开始使用包装器,而只会生成一个缺失的包装器,并将某些 Gradle 版本硬编码到当前的 Intellij 版本中。这种自动行为是完全符合预期的:如果包装器不在 Gradle 的项目根目录中(与

settings.gradle.kts
一起),则 Intellij 不知道包装器在哪里。所以,在这种情况下,我想配置 Intellij 将其指向右侧
gradlew
,但我无法在 Intellij 中找到相应的设置。 是否可以在 Intellij 设置中的任何位置配置 Gradle 包装器的自定义位置?

gradle intellij-idea gradlew
1个回答
0
投票

基于 @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 中,并使用您明确指定的版本。

© www.soinside.com 2019 - 2024. All rights reserved.