Gradles`jar`是一种方法吗?

我在Gradle中使用Java插件

apply plugin: 'java' 

我还使用以下命令配置Jar-task:

 version = '1.0' jar { manifest { attributes 'Implementation-Title': 'Gradle Quickstart', 'Implementation-Version': version } } 

如果我理解正确, jar是一个以闭包作为参数调用的方法 。 但这种方法记录在哪里? 我理解它是一种项目方法。

我在https://docs.gradle.org/current/userguide/java_plugin.html和https://docs.gradle.org/current/dsl/org.gradle.api.Project.html和https中找不到它://docs.gradle.org/current/dsl/org.gradle.api.tasks.bundling.Jar.html

或者我错误地认为jar是一种方法?

答案是肯定的,不是 。 语法是语法糖 (尽管在这种情况下它会让事情变得混乱)。 它不是一个被调用的函数jar ,而是函数tasks.getByName ,它将名称和闭包作为参数。

在https://docs.gradle.org/current/userguide/more_about_tasks.html上,它在第17.3. Configuring tasks部分中说明17.3. Configuring tasks 17.3. Configuring tasksExample 17.9. Configuring a task - with closure ):

这适用于任何任务。 示例的第3行只是tasks.getByName()方法的快捷方式。 重要的是要注意,如果将闭包传递给getByName()方法,则应用此闭包来配置任务,而不是在任务执行时。

所以你也可以写:

 version = '1.0' tasks.getByName "jar", { manifest { attributes 'Implementation-Title': 'Gradle Quickstart', 'Implementation-Version': version } } 

可能不是您正在寻找的全面答案,但在正确的方向上有一些指示:

jar任务的内部结构似乎没有详细记录,因此您必须查看源代码以获得您正在寻找的内容。 jar任务来自这里的java插件。 这反过来又增加了这个类的任务。 除了从Jar.java扩展之外,这个类没有做很多事情 。

所以看起来似乎是关闭:

 jar { .... } 

在这里调用构造函数并设置jar闭包中定义的属性。 进一步的Jar类从Zip.java扩展,同时覆盖存档文件的扩展名,并添加清单属性。

PS:这仍然不能帮助我理解你原来问题的 with jar ,但我喜欢你的问题,我正在学习一些事情!