我正在编写一个 Jenkins 插件,我正在使用build.getWorkspace()
它来获取当前工作区的路径。问题是这会返回一个 FilePath 对象。
如何将其转换为 File 对象?
我正在编写一个 Jenkins 插件,我正在使用build.getWorkspace()
它来获取当前工作区的路径。问题是这会返回一个 FilePath 对象。
如何将其转换为 File 对象?
虽然我没有尝试过,但根据javadoc,您可以获取 URI,然后您可以从中创建文件:File myFile = new File(build.getWorkspace().toURI())
如果您的插件适用于 master 和 slave,请使用act函数并调用您自己的FileCallable实现。有关更多信息,请查看文档,“巧妙地使用 FilePath”一章或这个stackoverflow 答案。
代码示例(来源):
void someMethod(FilePath file) {
// make 'file' a fresh empty directory.
file.act(new Freshen());
}
// if 'file' is on a different node, this FileCallable will
// be transferred to that node and executed there.
private static final class Freshen implements FileCallable<Void> {
private static final long serialVersionUID = 1;
@Override public Void invoke(File f, VirtualChannel channel) {
// f and file represent the same thing
f.deleteContents();
f.mkdirs();
return null;
}
}
这种方法
File myFile = new File(build.getWorkspace().toURI())
不是正确的解决方案。我不知道为什么到目前为止这一直是公认的答案。Sascha Vetter 提到的方法是正确的,参考了官方 Jenkins javadocs
,这清楚地表明,我引用
与 File 总是暗示当前计算机上的文件路径不同,FilePath 代表特定代理或控制器上的文件路径。
因此,作为 Jenkins 社区的积极贡献者,我会参考 Sascha Vetter 给出的答案。
PS。声誉点标准使我无法对正确答案进行投票。