2013-11-04 23 views
5

Piszę wtyczkę Jenkins i używam build.getWorkspace(), aby uzyskać ścieżkę do bieżącego obszaru roboczego. Problem polega na tym, że zwraca obiekt FilePath.Jak przekonwertować plik FilePath do pliku?

Jak mogę to przekonwertować na obiekt File?

+0

@Downvoter Nie rozumiem, dlaczego niektórzy ludzie po prostu -1 oczywistą, dlaczego. Myślę, że powinniśmy powiedzieć facetowi/dziewczynie, by napisał jakiś kod, zapytaj, co próbowali do tej pory, i tak dalej. Przekaż nam trochę opinii, abyśmy wszyscy mogli się czegoś nauczyć z tego doświadczenia. – Morfic

+0

** Pytanie: ** dlaczego chcesz obiekt 'File'? 'FilePath' jest w rzeczywistości dość ekspresyjnym interfejsem API i jest specjalnie zaprojektowany do obsługi zdalnych operacji na plikach. Jeśli spróbujesz uzyskać dostęp do obszaru roboczego za pomocą 'Plik' na zdalnym agencie slave, będziesz miał zły czas. –

Odpowiedz

7

Chociaż nie próbowałem tego, zgodnie z javadoc można uzyskać URI, z którego można następnie utworzyć plik: File myFile = new File(build.getWorkspace().toURI())

+0

Tak. Wydaje się działać. Dzięki. – daniels

+0

Jeśli potrzebujesz ścieżki jako łańcucha, użyj zamiast niej 'build.workspace.getRemote()'. – sschuberth

3

Proszę używać akt funkcję i zadzwonić własną FileCallable realizację jeśli twoja wtyczka powinna działać dla kapitana i niewolników. Aby uzyskać więcej informacji, sprawdź numer documentation, chapter "Using FilePath smartly" lub ten stackoverflow answer.

przykładem Code (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; 
    } 
}