gradle - 我们可以在 Gradle buildSrc 中定义多个插件类吗

标签 gradle gradle-plugin

我有一个非常典型的 Gradle 库项目,其中包含一组依赖于一些常见配置的模块(Android 或纯 Java)。

这个通用配置被抽象为一个“publishConfig.gradle”文件(在需要它的那些 build.gradle 文件中通过 apply 读取)和一些在 buildSrc 中捕获的自定义任务。这个问题是关于后者的。

buildSrc 是单个模块/项目,由特定包中的源(作为 Groovy)组成,作为具有两个类的单个 Groovy 文件:实现 Plugin 的类和插件扩展类。例如。:
org.clvrmnky.gradle.plugins.LibraryPlugin
此配置和定义的任务可以正常工作。那里没问题。

现在我想出于不同的原因添加额外的自定义任务(请记住,这是根项目中越来越多的子模块的共享自定义配置的一部分)所以我添加了一个并行类文件,它定义了一个实现 Plugin 的新插件类.例如。:
org.clvrmnky.gradle.plugins.BuildBreaker
作为引用,这里是类和任务定义片段:

[...]
public class BuildBreaker implements Plugin<Project> {
    static def authString = fetchSonarAuthString()

    @Override
    void apply(Project project) {
        project.extensions.create("buildbreaker", BuildBreakerExtension)

        project.task([
            description: 'Fail this task if the Sonarqube Quality Gate does not pass.',
            dependsOn: ["sonarqube"]
        ], 'breakOnBadQualityGate') {
[...]

也就是说,类和任务方法的定义类似,但具有不同的 String 标识符。

但是,当我这样做时,我定义的新任务对根项目或项目的任何子模块都不可见:
PS C:\rd\SOPLibs\Commons> .\gradlew.bat  breakOnBadQualityGate
:buildSrc:compileJava UP-TO-DATE
:buildSrc:compileGroovy UP-TO-DATE
[...]    
FAILURE: Build failed with an exception.

* What went wrong:
Task 'breakOnBadQualityGate' not found in root project 'Commons'.

* Try:
Run gradlew tasks to get a list of available tasks. Run with --stacktrace option
 to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED
build 目录包含所有源的类,并且有一个包含这些类的 lib jar,我认为这些类在运行时提供给 Gradle 类路径。也就是说,这是没有错误的构建和打包。

我已经看到您需要在多项目 buildSrc 项目上调整 buildSrc build.gradle 的提示,以便所有 jar 在运行时都位于类路径中,但在这种情况下,我们有一个包含多个插件任务的 jarfile。

我也尝试将 BuildBreaker 类移动到一个单独的包中,但这并没有解决问题。

我们能不能在一个 buildSrc 中实现多个 Plugin 类,即使它们有不同的类名?还是我必须将它们拆分为多个 buildSrc 项目?

最佳答案

您可以在 buildSrc 中定义任意数量的插件和任务。 .但是在你之前什么都不会生效

 apply plugin: foo.bar.MyPlugin

或者
task foo(type: com.foo.MyTask) {...} 

关于gradle - 我们可以在 Gradle buildSrc 中定义多个插件类吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42117465/

相关文章:

java - 将 jetty 插件替换为 gretty 插件 gradle 时出错

android - Android Studio 0.8-不再运行自定义任务

java - 如何在 Gradle 中编译之前移动生成的查询类型类?

gradle - 无法创建任务 ':GluonApplicationApp:debug'

java - 记录需要 ASM8

gradle - 如何在gradle build的配置阶段从xml文件中读取配置?

android - 为 androidTest 定义 buildConfigField

gradle - 如何使Intellij IDEA使用并行和Gradle构建缓存进行构建

Android:使用 Gradle Plugin 3.1.2 导入库模块导致我的项目出现编译错误

android - Gradle - 哪个任务创建了 'build' 目录?