我有一个基于java的gradle插件,可以为我们的gradle项目执行一些常见配置。现在我想添加像(目前在我们的build.gradle中为每个项目提供的)任务
task javadocJar(type: Jar) {
classifier = "javadoc"
from javadoc
}
我需要的是如何在基于Java的gradle插件中执行此操作的提示。
在另一个插件中,我已经使用project.getTasks().create("myTask", MyTask.class);
注册任务MyTask
扩展AbstractTask
并使用@TaskAction
方法来完成任务。但我发现没有办法让它适应我想用上面的例子做的事情。
我试图谷歌寻求解决方案,但直到现在我没有找到一个有用的提示,因为我发现的一切都是在build.gradle中直接使用groovy或类似于我的剪辑。
提前致谢!
看起来我找到了一个解决方案,至少对于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
varialbe。
提前致谢! :)
对asettoufs评论的回复:
您链接的文档与子项目的项目相关。我所拥有的是多个不相关的单个项目。对于那些我们有插件已经应用一些插件并配置它们。所以只需应用我们的插件,项目就有一个共同的配置。
我们的插件是用java编写的。而且应该继续是java。现在我们想将一些更常见的构建配置内容移动到插件中 - 例如上面的一些基本任务。
答案 0 :(得分:1)
要获取源设置,您可以询问convention
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
如何创建sourceSet
中写的Java
创建java convention
https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/java/org/gradle/api/plugins/JavaPlugin.java#L266