提高机器阅读理解(MRC)能力以及开放领域问答(QA)能力是自然语言处理(NLP)领域的一大重要目标。在人工智能领域,很多突破性的进展都基于一些大型公开的数据集。比如在计算机视觉领域,基于对ImageNet数据集研发的物体分类模型已经超越了人类的表现。类似的,在语音识别领域,一些大型的语音数据库,同样使得了深度学习模型大幅提高了语音识别的能力。
在入门教程构建基础中,你已经学习了如何创建简单的任务。之后您还学习了如何将其他行为添加到这些任务中。并且你已经学会了如何创建任务之间的依赖。这都是简单的任务。但 Gradle 让任务的概念更深远。Gradle 支持增强的任务,也就是,有自己的属性和方法的任务。这是真正的与你所使用的 Ant 目标(target)的不同之处。这种增强的任务可以由你提供,或由 Gradle 提供。
Future通过get方法来获取异步任务的结果,如果任务还没有完成则阻塞线程,因为我们需要它的结果,所以等待是应该的。
在入门教程中(构建脚本的基础识),已经学到了如何创建简单 task。之后您还学习了如何将其他行为添加到这些 task 中,同时你已经学会了如何创建 task 之间的依赖。这都是简单的 task 。但 Gradle 让 task 的概念更深远。Gradle 支持增强的task,也就是,有自己的属性和方法的 task 。这是真正的与你所使用的 Ant target(目标)的不同之处。
Ant 构建文件是用 XML 编写的,它不能像你喜欢的编程语言那样去声明变量。然而,正如你可能已经想到的,如果允许 Ant 声明变量,如项目名称,项目源目录等,这将是非常有用的。Ant 使用属性 (property) 元素来让你能够具体说明属性。这就允许这些属性能够在不同的构建和不同的环境下发生改变。
每个新创建的任务都是org.gradle.api.DefaultTask类型,org.gradle.api.Task的标准实现,DefaultTask所有的域都是私有的,意味着他们只能通过setter和getter方法来访问,庆幸的是Groovy提供了一些语法糖来允许你通过名字来使用域。
<<<<<<< HEADWar插件会添加下列任务到项目.表25.1.War插件-任务任务名依赖类型描述warcompileWar组装应用程序War文件War插件由Java插件添加下列依赖任务.表25.2.War插件-附加的依赖任务任务名依赖assemblewar图25.1.War插件-任务a655fa4be4421004591827ae70fee579703794dd
Java 插件引入了许多任务到项目当中, 具体如下表所示表22.1 java 插件-任务任务名依赖类型描述compileJava所有产生编译 classpath 的任务,包括编译配置项目的所依赖的 jar 文件JavaCompile使用 javac 命令编译产生 java源文件processResources-Copy复制生产资源到生产 class 文件目录classescompileJava任务和processResources任务。
为了让你的构建可以自定义任务, 你可以使用 taskdef(通常更容易) 或者 typedef Ant 任务, 就像你在一个build.xml文件中一样. 然后,你可以参考内置 Ant 任务去定制 Ant 任务.例 16.5.使用自定义 Ant 任务build.gradletask check << { ant.taskdef(resource: 'checkstyletask.properties') { classpath { fileset(dir: 'libs', includes: '*.
在构建脚本中, Ant 属性是由 Gradle提供的. 这是一个用于参考的 AntBuilder 实例. AntBuilder 用于从构建脚本访问 Ant 任务, 类型和属性. 下面的例子解释了从 Ant 的 build.xml 格式到 Grooy 的映射.你可以通过调用 AntBuilder 实例的方法执行 Ant 任务. 你可以使用任务名称作为方法名, 比如, 可以通过调用 anto.echo() 任务执行 Ant echo 任务.
同步任务 ( Sync ) 任务继承自复制任务 ( Copy ) , 当它执行时,它会复制源文件到目标目录中,然后从目标目录中的删除所有非复制的文件,这种方式非常有用,比如安装一个应用,创建一个文档的副本,或者维护项目的依赖关系副本.下面有一个例子,维护 build/libs 目录下项目在运行时的依赖例 15.7 使用 Sync 任务复制依赖关系build.
如果你正在使用一些附加的任务, 比如通过 Java 插件加入的任务, 你可能会注意到 Gradle 会跳过一些任务, 这些任务后面会标注 up-to-date. 代表这个任务已经运行过了或者说是最新的状态, 不再需要产生一次相同的输出. 不仅仅是这些内建任务, 其实你在运行自己的任务时, 也会碰到这种情况.1. 声明一个任务的输入和输出让我们先看一个例子.
任务树使用分层方式显示了所有的项目和它们的任务,双击一个任务,您就可以执行它.另外我们还可以使用过滤器过滤掉不常用的任务. 您可以点击 Filter 按钮来设置过滤条件. 设定哪些任务和项目可以显示. 隐藏的任务会使用红色来标记.注意:最新被创建的任务会默认被显示出来(相反是被隐藏).
执行 gradle help --task someTask 可以显示指定任务的详细信息. 或者多项目构建中相同任务名称的所有任务的信息.如下例.例 11.12. 获取任务帮助gradle -q help --task libs的输出结果> gradle -q help --task libsDetailed task information for libsPaths :api:libs :webapp:libsType Task (org.gradle.api.
执行 gradle tasks 命令会列出项目中所有任务.这会显示项目中所有的默认任务以及每个任务的描述.例 11.9 获取任务信息gradle -q tasks 命令的输出>
当你试图调用某个任务的时候,你并不需要输入任务的全名.只需提供足够的可以唯一区分出该任务的字符即可.例如,上面的例子你也可以这么写.用 gradle di 来直接调用 dist 任务:例 11.3. 简化任务名gradle di 命令的输出>
你可以用命令行选项-x来排除某些任务,让我们用上面的例子来示范一下.例子 11.2. 排除任务gradle dist -x test 命令的输出> gradle dist -x test:compilecompiling source:distbuilding the distributionBUILD SUCCESSFULTotal time: 1 secs可以看到, test 任务并没有被调用,即使它是 dist 任务的依赖.
Gradle 允许在脚本中定义一个或多个默认任务.例子 6.15. 定义默认任务build.gradledefaultTasks 'clean', 'run'task clean << { println 'Default Cleaning!'}task run << { println 'Default Running!'}task other << { println "I'm not a default task!"}gradle -q 命令的输出> gradle -qDefault Cleaning!
Ant 任务是 Gradle 的一等公民.Gradle 通过 Groovy 出色的集成了 Ant 任务.Groovy 自带了一个 AntBuilder.相比于从一个 build.xml 文件中使用 Ant 任务,在 Gradle 里使用 Ant 任务更为方便和强大. 从下面的例子中,你可以学习如何执行 Ant 任务以及如何访问 ant 属性:例子 6.13. 使用 AntBuilder 来执行 ant.loadfile 任务build.gradletask loadfile <<
你可以给任务加入自定义的属性.列如加入一个叫做 myProperty 属性,设置一个初始值给 ext.myProperty.然后,该属性就可以像一个预定义的任务属性那样被读取和设置了.例子 6.12. 给任务加入自定义属性build.gradletask myTask { ext.myProperty = "myValue"}task printTaskProperties << { println myTask.
关注时代Java