Gradle(5.0)中有两种创建方法,即任务:
tasks {
val javadocJar by creating(Jar::class) {
val javadoc by tasks
from(javadoc)
classifier = "javadoc"
}
}
和
tasks {
val javadocJar by registering(Jar::class) {
val javadoc by tasks
from(javadoc)
classifier = "javadoc"
}
}
基本一样的API,那么有什么区别呢?
公认的答案很好,但我想补充一点,如果您想实际使用由创建的
/稍后注册
调用创建的引用,那幺API将有所不同。比较
create<MavenPublication>("main") {
…
val sourcesJar by tasks.creating(Jar::class) {
val sourceSets: SourceSetContainer by project
from(sourceSets["main"].allJava)
classifier = "sources"
}
artifact(sourcesJar)
}
和
create<MavenPublication>("main") {
…
val sourcesJar by tasks.registering(Jar::class) {
val sourceSets: SourceSetContainer by project
from(sourceSets["main"].allJava)
classifier = "sources"
}
artifact(sourcesJar.get())
}
在注册的情况下,因为它是惰性的,您需要一个额外的. get()
调用,否则您会得到一个异常:
* What went wrong:
Cannot convert the provided notation to an object of type MavenArtifact: task ':experiments:sourcesJar'.
The following types/formats are supported:
- Instances of MavenArtifact.
- Instances of AbstractArchiveTask, for example jar.
- Instances of PublishArtifact
- Maps containing a 'source' entry, for example [source: '/path/to/file', extension: 'zip'].
- Anything that can be converted to a file, as per Project.file()
请参阅https://docs . grad le . org/current/user guide/kot Lin _ DSL . html # using _ the _ container _ API:
tasks.named("check")
tasks.register("myTask1")
上面的示例依赖于配置避免API。如果您需要或希望急切地配置或注册容器元素,只需将named()替换为getByName(),将register()替换为create()。
创建
和注册
(或5.0之前的Gradle版本中的create和
register
)之间的差异与“任务配置避免”
新API有关,这里详细介绍了这一点(参见本节):
如何推迟任务创建?
此功能要求构建作者通过将任务创建从TaskContainer.create(java.lang.String)API迁移到TaskContaineer.register(java.lang.String)APIs来选择加入。寄存器(…) 当且仅当需要任务时,API注册将在以后创建的任务。创建(…) API在被调用时继续急切地创建和配置任务。
问题内容: 对于一个宠物项目,数据库进入了顶峰, 元数据 达到了顶峰,我很难理解该命令与MySQL命令之间的区别(如果有)。 有什么区别吗?如果不是这样,这是关系数据库行为的一种相当典型的模式(我听说过,对于其他数据库(例如Oracle),模式存在于数据库中,而不是与数据库处于同一级别)。 谢谢! 问题答案: MySQL的文档说: CREATE DATABASE创建具有给定名称的数据库。要使用此语
问题内容: 我正在使用React.js创建一个地牢爬虫游戏,并且正在使用Array.fill(0)来初始化棋盘。但是当我在2d数组内设置元素时,它将整个Array(列)设置为,而不是单个元素。我有另一个功能,注释掉,可以正常工作。那么,为什么会发生这种情况?如何正确使用Array.fill? 这是我的董事会组件: 问题答案: 您可以通过Array.fill的方式填充2D数组:
问题内容: 我只是想知道为什么我们通常在两个布尔之间使用逻辑OR 而不是按位OR ,尽管它们都运行良好。 我的意思是,请看以下内容: 我们可以代替使用吗?与和相同。 问题答案: 如果您使用和形式,而不是这些运算符的和形式,则Java不会费心地单独评估右手操作数。 这是您是否希望缩短评估时间的问题-在 大多数情况 下都是如此。 说明短路好处的一个好方法是考虑以下示例。 正如Jeremy和Peter提
问题内容: 我在看一些模拟的OCJP问题。我遇到了一个非常令人困惑的语法。这里是: 为什么输出在和之间变化? 问题答案: 问题只是和您玩弄混乱的空格。 是通常的(不等于)比较。 另一方面: 最好写成如下形式: 因此,这是两个运算符。 首先反转。 然后将其分配回。 赋值运算符返回分配的值。因此,计算结果为true-这就是您要打印的内容。
只需在Xpath中添加即可--它突出显示--各种页面元素----它表示什么? 下面是用于Gmail密码字段的XPaths。的意义是什么? >
问题内容: 我是node.js的新手,并希望为用户创建一个注册和登录页面。还需要对该用户进行适当的授权。我想将用户信息存储在mongodb数据库中。我该如何实现?有人可以提供我吗?这样做的代码,以便我可以开始使用node.js和mongodb。请帮助 问题答案: 您可以在Alex Young 的Nodepad应用程序中找到要执行的操作的完整示例。您应该查看的2个重要文件是这些2: https :