Gradle : 多个子任务共享同一个扩展变量对象
Gradle : Multiple subtasks share the same extension variable object
我创建了一个像这样的自定义 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 ci
,而是 Env of dummy is test
。 ./gradlew dummyDev
也一样。
如何解决这个问题?谢谢。
您在始终运行的配置阶段设置扩展 属性。所以每次调用都会覆盖之前的调用。要在执行阶段设置它,请使用 doFirst { ... }
块。例如:
task dummyCI(type: DummyTask) {
doFirst {
dummy {
env = 'ci'
}
}
}
或者更好的解决方案是一起摆脱扩展对象,而是将 env
属性(输入?)添加到 DummyTask
我创建了一个像这样的自定义 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 ci
,而是 Env of dummy is test
。 ./gradlew dummyDev
也一样。
如何解决这个问题?谢谢。
您在始终运行的配置阶段设置扩展 属性。所以每次调用都会覆盖之前的调用。要在执行阶段设置它,请使用 doFirst { ... }
块。例如:
task dummyCI(type: DummyTask) {
doFirst {
dummy {
env = 'ci'
}
}
}
或者更好的解决方案是一起摆脱扩展对象,而是将 env
属性(输入?)添加到 DummyTask