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

プラグインがマスターとスレーブで動作する必要がある場合は、 act関数を使用して独自のFileCallable実装を呼び出してください。詳細については、ドキュメントの「Using FilePath smartly」の章またはこのstackoverflow answerを確認してください。

コード例 (ソース):

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 に答える