【问题标题】:What does Gradle 'build' task include exactlyGradle“构建”任务究竟包括什么
【发布时间】:2017-11-03 13:51:54
【问题描述】:

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

  • 来自java-base插件,对吧?
  • 运行gradle -q tasks 并没有说太多。

build - 组装和测试这个项目。

  • 运行 gradle help --task build 可以显示详细信息,但它会显示任务的使用位置、包含的组、任务类型和路径。

  • 我尝试手动跟踪它附带的内容,并注意到、编译、测试等任务。

我想知道 Gradle 构建任务究竟来自什么,任务依赖项是什么。

【问题讨论】:

    标签: java gradle


    【解决方案1】:

    gradlew build --dry-run

    启动一个 Gradle 守护进程,1 个忙,1 个不兼容,3 个停止 无法重用守护进程,请使用 --status 了解详情

    :compileJava 跳过
    :processResources 跳过
    :classes 跳过
    :bootWarMainClassName 跳过
    :bootWar 跳过
    :bootStartScripts 跳过
    :bootDistTar 跳过
    :bootDistZip 跳过
    :jar 跳过
    :startScripts 跳过
    :distTar 跳过
    :distZip 跳过
    :war 跳过
    :assemble 跳过
    :compileTestJava 跳过
    :processTestResources 跳过
    :testClasses 跳过
    :test 跳过
    :check 跳过
    :build 跳过

    在 32 秒内构建成功

    【讨论】:

      【解决方案2】:

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

      例如:

      plugins {
          id "com.dorongold.task-tree" version "1.3.1"
      }
      

      然后运行

      gradle build taskTree
      

      输出

      :build
      +--- :assemble
      |    \--- :jar
      |         \--- :classes
      |              +--- :compileJava
      |              \--- :processResources
      \--- :check
           \--- :test
                +--- :classes
                |    +--- :compileJava
                |    \--- :processResources
                \--- :testClasses
                     +--- :compileTestJava
                     |    \--- :classes
                     |         +--- :compileJava
                     |         \--- :processResources
                     \--- :processTestResources
      

      【讨论】:

      • 如果您想修复装饰器错误消息,如here 所述,请将插件版本升级到1.3.1。更喜欢这个答案,因为它提供了可重用的东西以及答案:)
      • 这可以很好地了解依赖关系
      【解决方案3】:

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

      如果您使用java-base 插件,则依赖项是:

      $ gradle build --console=plain
      :assemble
      :check
      :build
      

      如果你使用java(其中automatically appliesjava-base),那么依赖项是:

      $ gradle build --console=plain
      :compileJava
      :processResources
      :classes
      :jar
      :assemble
      :compileTestJava
      :processTestResources
      :testClasses
      :test
      :check
      :build
      

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

      #/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 . "}";
      }
      

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

      $ t=build; perl dependencies.pl $t | tred | dot -T png > $t.png
      

      或 ASCII 文本:

      $ t=build; perl dependencies.pl $t | tred | graph-easy > $t.txt
      

      【讨论】:

      • 感谢详细回复
      • 我推荐gradle build --dry-run 而不是gradle build --console=plain,因为试运行旨在打印本应输出的任务,而不是实际运行任务。 (--dry-run documentation)
      【解决方案4】:

      来自 Gradle Java 插件docs

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-11-15
        • 2016-07-17
        • 1970-01-01
        • 2010-12-31
        • 1970-01-01
        • 1970-01-01
        • 2012-08-18
        相关资源
        最近更新 更多