gpt4 book ai didi

java - Gradle : Multiple subtasks share the same extension variable object

转载 作者:行者123 更新时间:2023-11-30 02:45:08 24 4
gpt4 key购买 nike

我创建了一个像这样的自定义 Gradle 插件,

DummyPlugin.java

public class DummyPlugin implements Plugin<Project> {
@Override
public void apply(Project project) {
project.getTasks().create("dummy", DummyTask.class);
project.getExtensions().create("dummy", DummyExtension.class);
}
}

DummyTask.java

public class DummyTask extends Test {
@TaskAction
public void dummy() {
Project project = getProject();
DummyExtension extension = project.getExtensions().findByType(DummyExtension.class);
System.out.println("Env of dummy is " + extension.getEnv());
}
}

DummyExtension.java

public class DummyExtension {
private String env;

public String getEnv() {
return env;
}

public void setEnv(String env) {
this.env = env;
}
}

现在,我为不同的环境创建了三个任务,如下所示:

apply plugin: 'dummy'

task dummyCI(type: DummyTask) {
dummy {
env = 'ci'
}
}

task dummyDev(type: DummyTask) {
dummy {
env = 'dev'
}
}

task dummyTest(type: DummyTask) {
dummy {
env = 'test'
}
}

但是,在运行 ./gradlew dummyCI 时,我得到的是 Env of dummy is test,而不是 Env of dummy is ci >。 ./gradlew dummyDev 也一样。

如何解决这个问题?谢谢。

最佳答案

您在始终运行的配置阶段设置扩展属性。因此,每次调用都会覆盖前一个调用。要在执行阶段设置它,请使用 doFirst { ... } block 。例如:

task dummyCI(type: DummyTask) {
doFirst {
dummy {
env = 'ci'
}
}
}

或者更好的解决方案可能是一起删除扩展对象,并将 env 属性(输入?)添加到 DummyTask

关于java - Gradle : Multiple subtasks share the same extension variable object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40409186/

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