Gradle'构建'任务包括什么

Laz*_*ana 22 java gradle

我已经在Gradle文档和stackoverflow以及其他一些地方进行了搜索,但我找不到有关此任务中捆绑的内容的信息,或者我错过了它,如果是这样,请指出我的方向.

  • 它来自java-base插件,对吧?
  • 跑步gradle -q tasks并没有说太多.

构建 - 组装和测试此项目.

  • 运行gradle help --task build显示详细信息,确定 - 但它显示任务的使用位置,包括的组,任务类型和路径.

  • 我试图手动跟踪它带来了什么,并注意到,编译,测试等任务.

我想知道Gradle构建任务究竟是什么,任务依赖性是什么.

Edd*_*Edd 16

来自Gradle Java插件文档

构建依赖项

它的依赖关系是检查和组装任务,你可以看到它们有自己的依赖关系


lan*_*ava 14

您可以使用Gradle Task Tree Plugin查看任务依赖项

例如:

plugins {
    id "com.dorongold.task-tree" version "1.3.1"
}
Run Code Online (Sandbox Code Playgroud)

然后跑

gradle build taskTree
Run Code Online (Sandbox Code Playgroud)

产量

:build
+--- :assemble
|    \--- :jar
|         \--- :classes
|              +--- :compileJava
|              \--- :processResources
\--- :check
     \--- :test
          +--- :classes
          |    +--- :compileJava
          |    \--- :processResources
          \--- :testClasses
               +--- :compileTestJava
               |    \--- :classes
               |         +--- :compileJava
               |         \--- :processResources
               \--- :processTestResources
Run Code Online (Sandbox Code Playgroud)


Joh*_*ney 7

4.0版开始,您必须运行gradle build --console=plain以查看任务依赖项的完整列表。

如果您使用java-base插件,则依赖关系为:

$ gradle build --console=plain
:assemble
:check
:build
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

如果您使用java自动适用 java-base),则依赖项为:

$ gradle build --console=plain
:compileJava
:processResources
:classes
:jar
:assemble
:compileTestJava
:processTestResources
:testClasses
:test
:check
:build
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

为了查看上图中显示的确切依赖关系链,我使用了一个可以在Gradle项目中运行的Perl小助手。它产生一个描述依赖图的字符串:

#/bin/perl
use strict;

my @deps;
my %tasks;

getDeps($ARGV[0]);
printDot();

sub getDeps {
    my $task = shift;
    $tasks{$task} = "";
    chomp(my @subtasks = `gradle $task`);
    @subtasks = grep { $_ =~ "^:" } @subtasks;
    pop @subtasks;
    foreach(@subtasks) {
        my ($s) = $_ =~ "^:(.*) ";
        push @deps, "$task -> $s;";
        if(!defined $tasks{$s}) {getDeps($s)}
    }
}

sub printDot {
    my $dot = "digraph main {\n";
    if(@deps>1) {
        foreach(@deps) {$dot .= "$_\n"}
    } else {
        $dot .= "$ARGV[0];\n";
    }
    print $dot . "}";
}
Run Code Online (Sandbox Code Playgroud)

然后运行以下命令将输出转换为PNG图像:

$ t=build; perl dependencies.pl $t | tred | dot -T png > $t.png
Run Code Online (Sandbox Code Playgroud)

或ASCII文本:

$ t=build; perl dependencies.pl $t | tred | graph-easy > $t.txt
Run Code Online (Sandbox Code Playgroud)