我有一个基于java的gradle插件,它为我们的gradle项目做一些常见的配置。现在我想添加类似的任务(当前存在于每个项目的 build.gradle 中)
task javadocJar(type: Jar) {
classifier = "javadoc"
from javadoc
}
我需要的是关于如何在基于 java 的 gradle 插件中执行此操作的提示。
在另一个插件中,我已经使用 project.getTasks().create("myTask", MyTask.class);
注册任务,其中 MyTask
扩展了 AbstractTask
并有一个 @TaskAction
方法来履行其职责。但我发现没有办法使其适应我想要对上面的示例执行的操作。
我尝试在 google 上搜索解决方案,但直到现在我还没有找到有用的解决方案,因为我找到的所有内容都是使用 groovy 或类似于我上面直接在 build.gradle 中截取的内容。
提前致谢!
<小时/>看起来我找到了一个解决方案,至少对于 javadoc 任务......
Task javadocTask = project.getTasks().getByName("javadoc");
project.getTasks().create("javadocJar", Jar.class, task -> {
task.dependsOn(javadocTask);
task.setClassifier("javadoc");
task.from(javadocTask);
});
这似乎有效...但现在我对下一个 gradle 任务有问题:
task sourcesJar(type: Jar, dependsOn: classes) {
classifier = 'sources'
from sourceSets.main.allSource
}
到目前为止,我还没有找到一种方法来使用 Java 中的 sourceSets
变量。
提前致谢! :)
<小时/>对 asettoufs 评论的回复:
您链接的文档与具有子项目的项目相关。我拥有的是多个不相关的单个项目。对于那些我们有一个插件,它已经应用了一些插件并配置它们。因此,只需应用我们的插件,项目就有一个通用的配置。
我们的插件是用java编写的。并且应该继续是java。现在我们想将一些更常见的构建配置内容移至插件 - 例如上面的一些基本任务。
最佳答案
要获取源集,您可以询问约定
project.getTasks().create("sourceJar", Jar.class, task -> {
task.setClassifier("sources");
// grab the convention that holds the sourceSets
JavaPluginConvention javaConvention = project.getConvention().getPlugin(JavaPluginConvention.class);
// find our source set
SourceSet mainSourceSet = javaConvention.sourceSets.findByName('main');
// user `from` like normal
task.from(mainSourceSet.getAllSource());
});
一些源代码,了解 JavaPlugin
如何创建用 Java
编写的 sourceSet
关于java - 在基于java的插件中创建gradle任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42698858/