java - 在基于java的插件中创建gradle任务

标签 java gradle groovy gradle-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 或类似于我上面直接在 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 约定 https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/java/org/gradle/api/plugins/JavaPlugin.java#L266

创建源集 https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/java/org/gradle/api/plugins/JavaPlugin.java#L298

关于java - 在基于java的插件中创建gradle任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42698858/

相关文章:

java - 你能将 Java Retval 放入数组中吗

java - Ant 在我的 stdout 前加上 [java]

java - Hibernate异常: Unable to access lob stream

Android studio - 很多口味(> 70)时同步gradle花费的时间太长

groovy - 在 mailgun 中使用 groovy httpbuilder 发布参数

java - 如何使用响应式(Reactive)驱动程序连接到 Neo4J 嵌入式实例?

docker - 使用Intellij在Spring Boot中使用Gradle构建Docker镜像

java - CodeCov 找不到报告

jenkins - 在 Jenkins 管道脚本中获取当前用户的凭据

unit-testing - Grails单元测试异常java.lang.Exception : No tests found matching grails test target pattern filter