gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 06:00:28 25 4
gpt4 key购买 nike

我有一个非常典型的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com