我正在尝试使用名称
buildAndPost
扩展构建任务,在构建完成后,
将文件复制到所需的目的地并连接到服务器,触发重新加载机制,自动重新加载已安装的插件(它也是一个插件)。build.gradle
中的以下 groovy 代码访问 jar 文件:
task buildAndPost{
dependsOn build
doLast{
File builtFile = tasks.jar.archiveFile.get(); // <----- Here is the problem -----
PostBuildAction action = new PostBuildAction(builtFile, $serverDir);
}
}
为了使我的部分代码能够工作,我在构建脚本的最下面纯粹用 java 编写了, 它需要以 Java File 对象的形式执行
build
任务后构建的文件,即 java.io.File
。
但是
tasks.jar.archiveFile.get()
行从 groovy 或 gradle api 返回一个我目前不知道的对象。如何将该文件作为 Java 的文件或
java.io.File
对象获取?
这并不是 Groovy 的问题,而是通过查看文档解决的。
Java 插件创建的任务
jar
类型为 Jar
。您可以在 Gradle 发布的 Javadoc 中查阅 Jar
的 API,其中显示 Jar
有一个 getter 方法 getArchiveFile()
,它返回一个 Provider<RegularFile>
。 (这是您在 Groovy 中通过其 字段访问表示法访问属性
archiveFile
时调用的方法。)
RegularFile
有一个方法getAsFile()
,它返回底层的File
对象。
因此,要获得
File
,您可以致电:
tasks.jar.archiveFile.get().getAsFile()
或者事实上
tasks.jar.archiveFile.get().asFile
也可以在 Groovy 中使用,同样使用缩写语法来调用 Java getter。