Gradle 错误:找不到参数的方法 jar()

NO_*_*AME 5 gradle gradle-plugin

我正在编写一个自定义插件,它将一些数据添加到 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'
    }

}
Run Code Online (Sandbox Code Playgroud)

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

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

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

Fra*_*teo 1

jar()不是\xe2\x80\x99t 上的方法Project

\n\n

如果 I\xe2\x80\x99m 正确理解您的代码,您要做的就是配置从Java Pluginjar创建的任务。

\n\n

所以你需要:

\n\n
    \n
  1. 获取任务
  2. \n
  3. 配置任务
  4. \n
\n\n

就像是:

\n\n
import org.gradle.api.plugins.JavaPlugin\nimport org.gradle.api.tasks.bundling.Jar\n\npublic class ExamplePlugin implements Plugin<Project> {\n    def apply(Project project) {\n        project.afterEvaluate {\n            project.tasks.named(JavaPlugin.JAR_TASK_NAME, Jar) {\n                it.manifest {\n                    attributes \'buildServer\': checkIfIsBuildServer()\n                    attributes \'personalBuild\': checkIfIsPersonalBuild()\n                }\n            }\n        }\n    }\n\n    def checkIfIsBuildServer() {\n        \'some result\'\n    }\n\n    def checkIfIsPersonalBuild() {\n        \'some result\'\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

强烈建议您的插件改用 Kotlin 或 Java。与 Groovy\xe2\x80\x99 的动态性质相比,它会产生这样的微不足道的错误,并且您将完全理解事情的来源。

\n