【发布时间】:2019-12-10 16:17:57
【问题描述】:
我们有一个包含大量模块的 Gradle 项目。其中一个模块是自定义代码生成器,编写为 Gradle 插件。我们希望稍后在同一个整体多模块构建中的另一个模块中运行该代码生成器插件,以测试代码生成器。
我们知道如何动态创建一个单独的项目并在其中运行代码生成器,但我们需要在主项目中运行代码生成器,而不是在临时测试项目中。
我们尝试过的任何方法都不起作用,Gradle 文档似乎也没有解决这个问题。这似乎是 Gradle 设计的基础,因为在构建中使用的整个插件集基本上是一个程序,在开始时组装。在事实似乎不受支持之后尝试添加刚刚构建的插件,或者我们遗漏了一些东西。
到目前为止,我们能想到的最好的方法是用 Java 实现插件(Kotlin 也可以),所以 Gradle 插件只是实现的薄 Gradle 皮肤,并调用 Java 实现直接在另一个模块中运行代码生成器时。这可行,但这意味着我们实际上并未测试代码生成器的 Gradle 部分。
Maven 原生支持这一点(maven multi-module project with one plugin module 和 https://maven.apache.org/guides/mini/guide-multiple-modules.html),这并不奇怪,因为 Maven 中的每个插件都在单独的类加载器中运行。如果在 Gradle 中不可能,那将是 Gradle 没有功能奇偶校验的少数情况之一。
【问题讨论】:
标签: gradle plugins multi-module