I’m working on the plugin that generate Java source code by thrift.
At Plugin’s extension, I wanna use
public abstract class ExampleExtension {
public abstract DirectoryProperty getOutputDir();
//.. and other properties
}
And at Plugin side, I wanna add it to source set when there is a Java plugin already.
public class ExamplePlugin implements Plugin<Project> {
@Override
public void apply(Project project) {
//...
final ExampleExtension extension = ....;
project.getPlugins().withType(JavaPlugin.class).configureEach(javaPlugin -> {
//....
sourceSet.getJava().srcDir(extension.getOutputDir());
});
}
}
But looks like this doesn’t work due to sourceSet.getJava().srcDir(extension.getOutputDir()); will use the value before what user configured at build.gradle. Like the extension.getOutputDir() is fetch before user sets.
Curious if it’s good idea to add output to sourceset at plugin? Or I’m doing wrong… Thanks
Assuming you are also wiring that property to some task, better use the task as srcDir so that you also get the implicit task dependency whereever necessary automatically.
Btw. you can also do
public interface ExampleExtension {
DirectoryProperty getOutputDir();
//.. and other properties
}
Ah it’s my fault.
I tried to print the sourceset by another task and looks like it doesn’t reflect it correctly.
So looks like my origin code works and your suggestion works too. When I run compileJava & reload at IDE, both reflect the correct folder in sourceset.
To make it has correct dependency, I will use your suggestion. Thank you.