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

自定义gradle插件+从方法访问返回值?

燕光熙
2023-03-14
Build file '/Users/yomateod/workspace/work/spring.black/tags/build.gradle' line: 35

A problem occurred evaluating root project 'tags'.
> Could not find method getCurrentVersion() for arguments [] on root project 'tags' of type org.gradle.api.Project.
apply plugin: 'versionest'
version = getCurrentVersion()

任务类:

package matthewdavis.io.plugins.versionest.tasks;

import matthewdavis.io.plugins.versionest.Version;
import org.gradle.api.DefaultTask;
import org.gradle.api.tasks.TaskAction;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class GetVersion extends DefaultTask {

    public static Version getCurrentVersionFromFile() throws IOException {

        String file = Files.readString(Path.of("version.properties"));

        Pattern pattern = Pattern.compile("(\\d+)\\.(\\d+)\\.(\\d+)");
        Matcher matcher = pattern.matcher(file);

        matcher.find();

        Version version = new Version();

        if (matcher.groupCount() == 3) {

            version.setMajor(Integer.parseInt(matcher.group(1)));
            version.setMinor(Integer.parseInt(matcher.group(2)));
            version.setPatch(Integer.parseInt(matcher.group(3)));

        } else {

            System.out.println("ERROR: invalid format for version.properties");
        }

        return version;

    }

    @TaskAction
    public String getCurrentVersion() throws IOException {

        Version version = getCurrentVersionFromFile();

        System.out.println(version);

        return version.getMajor() + "." + version.getMinor() + "." + version.getPatch();

    }

}

正如您在上面看到的,我有getCurrentVersion()方法,通过gradle运行它可以正常工作:

$ gradle getCurrentVersion

> Configure project :
unspecified
> Task :getCurrentVersion
Version(major=0, minor=1, patch=0)

完整的build.gradle请访问https://github.com/spring-black/tags/blob/master/build.gradle#L35。

共有1个答案

尚河
2023-03-14

想通了..我需要使用“扩展”将我的值公开给build.gradle:

project.getExtensions().create("versionest", VersionestExtension.class);

扩展类如下所示:

public class VersionestExtension {

    public Version getVersion() throws IOException {

        return GetVersion.getCurrentVersionFromFile();

    }

}

build.gradle:

apply plugin: 'versionest'
version = versionest.version.toString()
10:45:29 PM: Executing task 'compileJava'...

> Configure project :
0.1.0
 类似资料:
  • 我正在尝试使用状态代码201的Ihttpstatus标头获取此JSON响应,并将IHttpActionResult作为我的方法返回类型。 我想要返回的JSON: {“客户 ID”: 324} 我的方法: JSON返回: “ID”:324,“日期”:“2014-06-18T17:35:07.8095813-07:00”, 以下是我尝试过的一些返回,它们要么给了我uri null错误,要么给了我类似于

  • 我正在使用maven-publish插件。我有一个出版物叫MyMedia。当我尝试执行时,它返回null。如果有maven-publish插件创建的名称为null的任务,为什么会返回null。 我尝试了Francisco Mateo的建议,使用afterEvaluate方法,但这似乎对我也不起作用。 然而,当我试图找出真正的原因时,我发现了一个有趣的观察。我发现,当我从任务中调用时,它工作得非常好

  • 我为gradle创建了一个简单的基于groovy的插件。 在我的毕业典礼上。构建文件我有以下内容: 一切都很好,我得到了一个构建目录和一个. jar在lib文件夹中生成,我想这是独立的插件。 现在我想知道如何将这个新插件注册到我的gradle安装中,这样我就可以应用插件了:“myPlugin”我做了以下工作: 将插件放入安装中的插件文件夹 创建了myplugin.properties文件并将其包含

  • 我正在尝试创建一个自定义任务/插件(两者都拒绝工作),用于我的gradle构建脚本。 我正在使用groovy插件,希望在单独的文件中声明任务/插件,而不是在我的构建中。格拉德尔。 我的项目树如下所示: 我试图做的是在中创建我的任务/插件类,然后在。 让我举一个小例子。 TestTask。groovy: build.gradle 当我尝试使用我的gradle.build(清洁,构建等)做任何事情时,

  • 我对我的代码有个问题。我已经将类Employee声明为抽象。其下有3种抽象方法:抽象字符串部门、抽象int work_days和抽象void print_info。 现在,我创建了扩展Employee抽象类的第二类Tester。我实现了抽象方法。

  • 问题内容: 我正在用Gradle创建一个构建过程,我想提供一个使用Java代码的插件。Gradle 插件文档 说 这是可能的: 您可以使用任何喜欢的语言来实现自定义插件,前提是该实现最终会编译为字节码。对于此处的示例,我们将使用Groovy作为实现语言。如果需要,可以改用Java或Scala。 但是,经过数小时的谷歌搜索和阅读之后,我还没有找到有关如何使用Java创建Gradle自定义插件的任何说