当前位置: 首页 > 知识库问答 >
问题:

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

皇甫树
2023-03-14

我有一个基于java的gradle插件,可以为我们的gradle项目进行一些常见的配置。现在,我想添加以下任务(当前存在于每个项目的build.gradle中)

task javadocJar(type: Jar) {
    classifier = "javadoc"
    from javadoc
}

我需要的是关于如何在基于java的gradle插件中执行此操作的提示。

在另一个插件中,我已经使用项目注册了任务。getTasks()。创建(“myTask”,myTask.class)

我试图谷歌的解决方案,但到目前为止,我没有找到一个有用的汤,因为我找到的一切都是使用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中的变量集。

提前感谢!:)

对asettoufs评论的回应:

您链接的文档与包含子项目的项目相关。我拥有的是多个不相关的单个项目。对于这些,我们有一个插件,它已经应用了一些插件并配置了它们。因此,通过应用我们的插件,这些项目有一个共同的配置。

我们的插件是用java编写的。并且应该继续是java。现在我们想把一些更常见的构建配置移到插件中——例如上面提到的一些基本任务。

共有1个答案

东郭海阳
2023-03-14

要获得源代码集,您可以询问惯例

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

创建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

 类似资料:
  • 我有一些与jdbc相关的通用代码,我想单独打包到一个可运行的jar中,其中已经包含了所需的jdbc库,因此每个数据库类型都有一个单独的可运行jar。源代码将保持不变,但打包的jdbc jar将不同。 例如jdbc app postgres。jar将只包含postgres jdbc jar,而jdbc应用程序mysql。jar将包含mysql jdbc jar。 是否可以使用gradle对任务或任何

  • 我最近开始实现Gradle发布插件。我已经经历了https://github.com/researchgate/gradle-release#custom-释放步骤。 该插件正在将SNAPSHOT版本更新为发布版本,将当前SNAPSHOT版本更新为下一个版本。gradle发布任务也在执行编译、构建步骤。我在Jenkins中自动执行了此操作。我尝试了“构建任务 = []" 但构建任务仍已执行。我找不

  • 我在做一个多项目分级配置。 但没有成功。 当我打印每个子项目的task编号时,它会显示NativeBinaries项目直到第一个任务执行之后仍为零任务。 编辑: null

  • 问题内容: 我正在用Gradle创建一个构建过程,我想提供一个使用Java代码的插件。Gradle 插件文档 说 这是可能的: 您可以使用任何喜欢的语言来实现自定义插件,前提是该实现最终会编译为字节码。对于此处的示例,我们将使用Groovy作为实现语言。如果需要,可以改用Java或Scala。 但是,经过数小时的谷歌搜索和阅读之后,我还没有找到有关如何使用Java创建Gradle自定义插件的任何说

  • 我想创建一个自动应用其他插件(外部插件)的插件。这需要在调用“apply plugin”之前设置插件的buildscript依赖项。然而,我似乎无法在插件中添加buildscript依赖项,或者我得到:您无法更改未处于未解析状态的配置! 有解决办法吗? 我的示例(非工作)代码:

  • 我正在尝试创建一个自定义任务/插件(两者都拒绝工作),用于我的gradle构建脚本。 我正在使用groovy插件,希望在单独的文件中声明任务/插件,而不是在我的构建中。格拉德尔。 我的项目树如下所示: 我试图做的是在中创建我的任务/插件类,然后在。 让我举一个小例子。 TestTask。groovy: build.gradle 当我尝试使用我的gradle.build(清洁,构建等)做任何事情时,