假设我有一个monorepo,它有一堆微服务,形成了一个分布式系统。它们都是基于JVM的,并使用最新的Gradle作为构建系统。它不是一个包含多个模块的Gradle项目。每个应用都有自己的独立项目(settings.gradle.kts
),尽管它们与所谓的“传统Gradle插件”共享一些构建逻辑。
作为一名开发人员,我希望能够在Intellij中导入单个微服务项目,以防止IDE执行索引和重新索引整个代码库的繁重工作。没问题,因为每个微服务都是一个Gradle项目,所以我可以单独导入每个微服务。但当我再加上一个要求时,问题就出现了:“当我导入任何单个微服务/项目时,我希望使用位于存储库根目录中的单个Gradle Package 器”。
为什么?为什么?
- 因为我不希望在我的monorepo中有多个Gradle Package 器的二进制文件
- 因为我想要一个地方声明Gradle版本(存储库根的
gradle-wrapper.properties
) - 而且因为基于Gradle文档,这是一种推荐的方法:
如果所有组件都位于同一个存储库中,您应该在存储库的根目录中只有一个Gradle Package 器。如果你有一个伞构建,你可以使用它来管理 Package 器。
就在下一句话中,Gradle文档添加了一个小问题:
但是,如果您在IDE中导入单个组件,则可能无法找到 Package 器,并且您可能需要手动配置Gradle安装。
这正是我的问题所在。如何手动配置Intellij以将其指向正确的 Package 器?
如果我只在根目录中使用Gradle wrapper(比如Gradle文档中的this构建组织示例),那么在终端中,我可以很容易地从根目录中使用wrapper,如下所示:
cd server-application
../gradlew :clean :build # note the '../'
但是如果我只想在Intellij中导入一个Gradle项目(不包含它自己的gradlew
文件):
- 或者通过在Intellij中打开单个子目录
- 或通过取消链接根伞项目并右键单击项目的
*.gradle.kts
文件,然后→“链接Gradle项目”上下文菜单选项
. Intellij不会使用根目录的wrapper,而是简单地生成一个缺少的wrapper,一些Gradle版本硬编码到当前的Intellij版本中。这种自动行为是完全可以预期的:如果 Package 器不在Gradle的项目根目录中(与settings.gradle.kts
一起),则Intellij不知道 Package 器在哪里。因此,在这种情况下,我想配置Intellij将其指向正确的gradlew
,但我无法在Intellij中找到相应的设置。是否可以在Intellij设置中的任何地方配置Gradle Package 器的自定义位置?
1条答案
按热度按时间k3bvogb11#
根据@romanv-jb的评论,现在不可能在Intellij中为Gradle Package 器配置自定义位置。
IDEA-332154功能请求已创建。按照链接,并给它一个“竖起大拇指”给予,如果你也有兴趣在这个功能。
至于现在,如果你想硬固定要由Intellij使用的Gradle版本,同时你希望避免提交额外的非根Gradle Package 器,只需在
build.gradle.kts
中使用以下DSL:有了上面的 Package 器任务配置,Intellij将使用您显式指定的版本将项目导入IDE。