Gradle error: Could not find method jar() for arguments

Gradle error: Could not find method jar() for arguments

我正在编写一个自定义插件,它将一些数据添加到 Java 项目的清单中。

看起来像这样:

package com.example.gradle

import org.gradle.api.Plugin
import org.gradle.api.Project

public class ExamplePlugin implements Plugin<Project> {

    def apply(Project project) {
        project.jar() {
            manifest {
                attributes 'buildServer': checkIfIsBuildServer()
                attributes 'personalBuild': checkIfIsPersonalBuild()
            }
        }
    }

    def checkIfIsBuildServer() {
        return 'some result'
    }

    def checkIfIsPersonalBuild() {
        return 'some result'
    }

}

当我尝试将它应用到某个项目时,出现错误:

Could not find method jar() for arguments [com.example.gradle.ExamplePlugin$_apply_closure1@411e4f5e] on project ':SomeProject' of type org.gradle.api.Project.

我有理由相信这是一些缺失的导入。我不知道如何确定它应该是什么导入。

jar() 不是 Project 上的方法。

如果我对您的代码的理解正确,那么您要做的是配置从 Java Plugin.

创建的 jar 任务

所以你需要:

  1. 获取任务
  2. 配置任务

类似于:

import org.gradle.api.plugins.JavaPlugin
import org.gradle.api.tasks.bundling.Jar

public class ExamplePlugin implements Plugin<Project> {
    def apply(Project project) {
        project.afterEvaluate {
            project.tasks.named(JavaPlugin.JAR_TASK_NAME, Jar) {
                it.manifest {
                    attributes 'buildServer': checkIfIsBuildServer()
                    attributes 'personalBuild': checkIfIsPersonalBuild()
                }
            }
        }
    }

    def checkIfIsBuildServer() {
        'some result'
    }

    def checkIfIsPersonalBuild() {
        'some result'
    }
}

高度建议为您的插件切换到 Kotlin 或 Java。它会使像这样微不足道的错误得到解决,与 Groovy 的动态特性相比,您将完全理解事情的来源。