2013-11-04 17 views
5

Ich schreibe ein Jenkins-Plugin und ich verwende build.getWorkspace(), um den Pfad zum aktuellen Arbeitsbereich zu erhalten. Das Problem ist, dass dies ein FilePath-Objekt zurückgibt.Wie kann ich einen FilePath in eine Datei konvertieren?

Wie kann ich dies in ein Dateiobjekt konvertieren?

+0

@Downvoter Ich verstehe nicht, warum manche Menschen nur -1 ohne warum zu sagen. Ich denke, wir sollten dem Kerl/Mädchen sagen, dass sie etwas Code schreiben sollen, was sie bisher versucht haben und so weiter. Gib einfach Feedback, damit wir alle etwas von dieser Erfahrung lernen können. – Morfic

+0

** Frage: ** Warum willst du ein 'File' Objekt? 'FilePath' ist eigentlich eine ziemlich ausdrucksstarke API und wurde speziell für die Verarbeitung von Remote-Dateioperationen entwickelt. Wenn Sie versuchen, den Arbeitsbereich mit 'File' auf einem Remote-Slave-Agenten aufzurufen, wird es Ihnen" schlecht gehen ". –

Antwort

7

Obwohl ich nicht versucht haben, nach dem javadoc Sie den URI erhalten können, aus denen Sie dann eine Datei erstellen: File myFile = new File(build.getWorkspace().toURI())

+0

Ja. Scheint zu arbeiten. Vielen Dank. – daniels

+0

Wenn Sie den Pfad als Zeichenfolge benötigen, verwenden Sie stattdessen 'build.workspace.getRemote()'. – sschuberth

3

Bitte benutzen Sie den Akt Funktion und rufen Sie Ihren eigenen FileCallable Implementierung wenn Ihr Plugin für Master und Slaves funktionieren soll. Für weitere Informationen überprüfen Sie die documentation, chapter "Using FilePath smartly" oder diese stackoverflow answer.

Code-Beispiel (source):

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; 
    } 
}