Ich erstelle ein benutzerdefiniertes Maven-Plugin. In einem seiner Mojos, lese ich ein Xpp3Dom
Objekt aus XML-Datei folgenden Code Stückes:Holen Sie sich den Verzeichnispfad des Maven-Plugins in seinem eigenen Mojo
File pluginsFile = new File(
"absolute-path-to-file/plugins.xml");
Xpp3Dom Xpp3DomObject = new Xpp3Dom("plugins");
try {
FileReader reader = new FileReader(pluginsFile);
Xpp3DomObject = Xpp3DomBuilder.build(reader);
reader.close();
} catch (Exception e) {
// TODO throw exception
}
Die XML-Datei, aus der ich gelesen bin (plugins.xml
) in src/main/resources
des Maven gespeichert Plugin selbst. Meine Frage ist, wie kann ich auf diese XML-Datei zeigen, ohne explizit den absoluten Pfad zu dieser Datei anzugeben?
Um es klar zu stellen: Ich möchte, dass diese Datei im Verzeichnis meines Maven Plugins ist. Es kann nicht außerhalb des Maven-Plugins sein, da es ein notwendiger Teil des Maven-Plugins ist und nicht von anderen Maven-Projekten geändert werden sollte, die dieses Plugin benutzen.
Ich habe nach einer Variable/Methode in Maven Mojo gesucht, die mir die absolute Position des Maven-Plugins selbst geben würde. Wenn ich das bekomme, kann ich den Ort einfach als value-of-that-variable/src/main/resources/plugins.xml
angeben. Aber ich kann eine solche Variable nicht finden. Ich habe auch versucht für eine Möglichkeit, Eigenschaften von Maven Plugin POM zu einem seiner Mojos zu übergeben, so dass ich project.build.directory
übergeben kann, aber keinen Weg finden kann.
Um klar zu sein: Ich möchte auf eine Datei zugreifen, die unter dem Maven Plugin-Verzeichnis ist, in einem seiner Mojos.
Alle Vorschläge helfen.
Das hat funktioniert! Ich hatte 'getClassLoader(). GetResource (" fileName ")' versucht und direkt diese Ressource-Datei in 'Xpp3DomBuilder.build()' als Eingabe verwendet. Aber ich habe eine Fehlermeldung erhalten, dass 'absoluter Pfad zu Plugin-jar/jarName!/FileName' nicht existiert. Die Verwendung von 'getResourceAsStream' und das Speichern in einer temporären Datei unter Verwendung von 'OutputStream' und die Verwendung dieser Datei funktionierten jedoch. Irgendeine Idee, warum es direkt verwendet hat, hat nicht funktioniert? –
Und nur um für irgendjemand anderen zu verdeutlichen, 'Xpp3DomBuilder.build (input)' funktioniert nicht. Die Eingabe muss eine Datei sein. –
Warum hat es nicht direkt funktioniert? Ich nehme an, Sie haben versucht, eine 'Datei' zu erstellen, indem Sie die URL verwenden, die von' getResource' zurückgegeben wird. Dies sind inkompatible Typen. Deshalb empfehle ich Ihnen, 'getResourceAsStream' zu verwenden, das einen' InputStream' zurückgibt, so dass Sie die 'File' API vermeiden können. –