Hello everyone,
I have written custom a gradle plugin in Java, which I want to use in a multiproject gradle setup. I applied the plugin in the subprojects section of my build.gradle. The task which comes with the plugin is only executed once and I don’t understand why.
The structure of the project looks like this:
Root project
|- settings.gradle
|- build.gradle
|- project1
| |- build.gradle
|- project2
| |- build.gradle
|- project3
| |- build.gradle
...
The root build.gradle looks like this
buildscript {
repositories {
jcenter()
maven { url "https://repo.spring.io/plugins-snapshot" }
maven { url "https://repo.spring.io/plugins-release" }
maven{
url = "https://my-personal-nexus.de/content/repositories/release/"
}
....
dependencies {
....
classpath "de.mystuff:myCustomPlugin:1.0.0"
}
}
}
subprojects {
apply plugin: "myCustomPlugin"
....
}
The plugin “myCustomPlugin” provides 2 Tasks called myTask and myDocTask. Since the plugin is applied in die subprojects part of the build.gradle, I assumed that when I call:
./gradlew myTask
the task would be executed for project1, project2, project3.
In reality the task only executes in project1 and not in project2 or project3. If I call
./gradlew -p "project2" myTask
the task is executed in project 2 just fine. Any hints on why the task is not executed for every subproject?
When I call
./gradlew tasks --all
The result shows the task is registered for every subproject.
The Plugin is written in java. The code of the task looks like this:
public class MyGeneratorTask extends DefaultTask {
@TaskAction
public void genMyCode() throws Exception {
MyGeneratorExtension extension = getProject().getExtensions().getByType(MyGeneratorExtension.class);
MyGeneratorConfig.setPath(extension.getPath());
MyGeneratorConfig.setGendir(extension.getGendir());
MyCodeGeneratorApplication.generateMyClasses();
}
}
And the plugin definition itself:
public class MyPlugin implements Plugin<Project> {
static final String GEN_TASK_CONFIG = "myConfig";
static final String GEN_TASK_NAME = "myTask";
static final String DOC_TASK_NAME ="myDocTask";
@Override
public void apply(Project target) {
target.getExtensions().add(GEN_TASK_CONFIG, MyGeneratorExtension.class);
target.getTasks().create(GEN_TASK_NAME, MyGeneratorTask.class);
target.getTasks().create(DOC_TASK_NAME , MyDocTask.class);
}
}
And the code of the extension:
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class MyGeneratorExtension {
private String path;
private String gendir;
}
Some additional information:
- The tasks are not marked as SKIPPED. They never show up in the task history. When I run the task the build says:
BUILD SUCCESSFUL in 1s
1 actionable task: 1 executed
Thanks for your help!