7

我正在编写一个 Jenkins 插件,我正在使用build.getWorkspace()它来获取当前工作区的路径。问题是这会返回一个 FilePath 对象。

如何将其转换为 File 对象?

4

3 回答 3

11

虽然我没有尝试过,但根据javadoc,您可以获取 URI,然后您可以从中创建文件:File myFile = new File(build.getWorkspace().toURI())

于 2013-11-04T23:42:07.610 回答
5

如果您的插件适用于 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;
    }
}
于 2013-11-06T13:32:11.330 回答
2

这种方法 File myFile = new File(build.getWorkspace().toURI())不是正确的解决方案。我不知道为什么到目前为止这一直是公认的答案。Sascha Vetter 提到的方法是正确的,参考了官方 Jenkins javadocs

,这清楚地表明,我引用

与 File 总是暗示当前计算机上的文件路径不同,FilePath 代表特定代理或控制器上的文件路径。

因此,作为 Jenkins 社区的积极贡献者,我会参考 Sascha Vetter 给出的答案。

PS。声誉点标准使我无法对正确答案进行投票。

于 2021-08-13T07:19:33.730 回答