gpt4 book ai didi

java - 自定义gradle插件+访问方法的返回值?

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

我创建了一个自定义插件来仅管理version.properties文件。一切正常,可以执行gradle任务,什么都不可以。我遇到的问题是如何在version中访问从任务返回的值(在运行时设置build.gradle变量)。

错误:

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.
build.gradle中的第34和35行:
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

我在 https://github.com/mateothegreat/gradle-plugin-versionest/blob/master/src/main/java/matthewdavis/io/plugins/versionest/VersionestPlugin.java#L12声明我的任务
任务类位于 https://github.com/mateothegreat/gradle-plugin-versionest/blob/master/src/main/java/matthewdavis/io/plugins/versionest/tasks/GetVersion.java

我怀疑我缺少从 build.gradle的全局范围调用任务的正确方法。任何帮助都会受到 的极大支持,表示赞赏。

谢谢你们!
-马修

最佳答案

想通了..我需要使用“扩展名”将我的值暴露给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()

println version运行测试任务:
10:45:29 PM: Executing task 'compileJava'...

> Configure project :
0.1.0

对于遇到相同问题的用户,请查看 https://github.com/mateothegreat/gradle-plugin-versionest#setup

关于java - 自定义gradle插件+访问方法的返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59024354/

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