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 tasks
( Example 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
,但我喜欢你的问题,我正在学习一些事情!