当前位置: 首页 > 知识库问答 >
问题:

我们能在一个Gradle build中定义不止一个插件类吗?src

金慈
2023-03-14

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

此配置和定义的任务可以正常工作。那里没问题。

现在,我想添加其他自定义任务,原因不同(请记住,这都是根项目中越来越多子模块的共享自定义配置的一部分),所以我添加了一个并行类文件,该文件定义了一个实现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') {
[...]

但是,当我这样做时,我定义的新任务对根项目或项目的任何子模块都不可见:

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。

我们能不能在一个buildSrc中实现多个plugin类,即使它们有不同的类名?或者我必须将这些拆分为多个buildSrc项目?

共有1个答案

佴阳辉
2023-03-14

您可以在buildsrc中定义任意多的插件和任务。但在你之前什么都不会生效

 apply plugin: foo.bar.MyPlugin

task foo(type: com.foo.MyTask) {...} 
 类似资料:
  • 问题内容: 我想知道我们可以在一个接口内定义一个接口。喜欢 这是面试中提出的问题。任何实时使用。 问题答案: 是的,我们可以做到。Java中的嵌套接口的定义如下: 嵌套接口是其声明出现在另一个类或接口的主体内的任何接口。顶级接口是不是嵌套接口的接口。 请参阅此为多。 进一步 … 一个原因可能是外部接口具有一种将回调实现作为参数的方法。在这种情况下,嵌套接口是回调方法必须实现的协定。我没有理由在顶层

  • 问题内容: 现在,我们有BiMap和multiMap的概念,但是有multiBiMap吗?所以这是什么意思。在multiMap中,K和V之间具有一对多的关系,单个键可以与多个值关联,因此也可以与名称关联。在双向映射中,您有K,V对,这是双向的,您也可以获取V,K关系。就像有两个常规地图,但已同步。我需要一个双向多地图,您可以将这两个概念结合在一起。 问题答案:

  • 问题内容: 为什么B类无法公开?如何在其他班级使用班级?在Cons中定义它更好吗? 问题答案: 根据Java语言规范,文件(.java)中只能有一个公共类,并且文件名应与公共类名相同。 如果希望在其他地方访问B类,则可以创建一个单独的B.java文件,然后将B类代码移至该文件。 该线程可以为您提供更多信息。

  • 如何使用Firebase云函数实现微服务架构?我们是否可以编写多个.js文件,而不是将所有函数都写入index.js中,这样就不必为了单个函数的变化而重新部署所有函数

  • 我正在开发一个Android应用程序,我正在使用了解我的应用程序的安装来源。为此,我使用了firstInstall\u referer intent filter和一个我自己定制的过滤器。 是否有可能有两个广播接收器条目带有意图过滤器? 谷歌分析接收器 我的自定义广播接收器。

  • 以下是输出信息: 线程“main”java.lang.noClassDeffounder:top/example/study/testclass(名称错误:top/example/study/testclass)在java.base/java.lang.classloader.defineclass1(本机方法)在java.base/java.lang.classloader.defineclas