2016-07-25 3 views
3

In einem Maven-Projekt möchte ich einige Testergebnisse in eine Datei im Zielverzeichnis des Projekts schreiben. Immer wenn ich das Projektverzeichnis erhalte, erhält es tatsächlich das IntelliJ-Projektverzeichnis anstelle des tatsächlichen Maven-Verzeichnisses.Erhalte den Zielverzeichnispfad in Maven (Java)

+0

Theres eine etwas Sound-Lösung für dieses Problem hier lesenswert: http://stackoverflow.com/questions/7808664/ how-to-get-maven-project-basedir-from-java-code - Kurz gesagt, Sie können das Maven-Projekt Basisverzeichnis bekommen und das könnte sein, was Sie suchen, hoffe es klappt, wenn nicht lassen Sie mich wissen :) – D3181

Antwort

3

Ich habe die Lösung dafür. Hier ist, wie ich umsetze. Ich habe meine eigene Klasse CSVReader, die CSVReader-Bibliothek verwendet. Ich schreibe meine Ergebnisse in der Datei results.csv unter Zielverzeichnis.

URL location = CSVReader.class.getProtectionDomain().getCodeSource().getLocation(); 
String path = location.getFile().replace("classes/","") + "results.csv"; 

In dem obigen Code, den ich den Zielverzeichnispfad bin immer und die Klassen zu entfernen/durch Zeichenfolge ersetzen Methode und Anhänge Namen meiner gewünschte Datei aus. Hoffe, das könnte jemandem helfen.

3

Ich habe die obige Antwort mit einer leichten Änderung verwendet (ich kann keine Kommentare hinzufügen). Da Tests in den Ordner 'test' gestellt werden, befinden sich ihre Klassen in 'target/test-classes' (daher kann das Ersetzen von 'Klassen' möglicherweise nicht das erwartete Ergebnis liefern). Stattdessen habe ich die folgenden:

File targetClassesDir = new File(ExportDataTest.class.getProtectionDomain().getCodeSource().getLocation().getPath()); 
File targetDir = targetClassesDir.getParentFile(); 
+0

Warum this.getClass(). GetProtectionDomain(). GetCodeSource(). GetLocation(). GetPath() würde Ihnen den Pfad mit einem an die Front angehängten Schrägstrich geben? – Madrugada

0

Sie auch java.nio.file.Paths verwenden:

URL url = Paths.get("target", "results.csv").toUri().toURL();