在基于 java 的插件中创建 gradle 任务
create gradle task in java based plugin
我有一个基于 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 或类似于我在 [=50 上面直接剪下的东西=].
提前致谢!
看起来我找到了解决方案,至少对于 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。现在我们想将一些更常见的构建配置内容移动到插件中 - 例如上面的一些基本任务。
要获取源集,您可以询问 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
如何创建在Java
中编写的sourceSet
的一些源代码
正在创建 java convention
https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/java/org/gradle/api/plugins/JavaPlugin.java#L266
正在创建 sourceSets
https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/java/org/gradle/api/plugins/JavaPlugin.java#L298
我有一个基于 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 或类似于我在 [=50 上面直接剪下的东西=].
提前致谢!
看起来我找到了解决方案,至少对于 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。现在我们想将一些更常见的构建配置内容移动到插件中 - 例如上面的一些基本任务。
要获取源集,您可以询问 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
如何创建在Java
sourceSet
的一些源代码
正在创建 java convention
https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/java/org/gradle/api/plugins/JavaPlugin.java#L266
正在创建 sourceSets
https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/java/org/gradle/api/plugins/JavaPlugin.java#L298