Ich schreibe einfache Anwendung finden und ich habe irgendwie verloren - hier ist der Deal:Kann nicht Ressourcendatei unter Maven
Projektstruktur ist wie folgt:
ProjectApp
|-- pom.xml
`-- .idea
`-- src
-- main
|-- java
| `-- myapp
| |-- components
| | <some files>
| |-- controllers
| | <some files>
| |-- repositories
| | <some files>
| |-- Main.java
`-- resources
|-- database
| -- Data.csv
`-- fxml
-- Scene.fxml
Wie Sie in der sehen Ressourcenordner Ich habe 2 Unterordner, einer davon ist für Daten, ein anderer für fxmls (diese App ist eine einfache JavaFX-Anwendung). Hier ist das Problem:
Code I zum Laden Szene verwenden
String SCENE_PATH = "/fxml/Scene.fxml";
Parent root = FXMLLoader.load(getClass().getResource(SCENE_PATH));
Code I zum Laden von Daten verwenden (Ich verwende opencsv Bibliothek)
String DATA_PATH = "database/ClientData.csv";
ClassLoader classLoader = getClass().getClassLoader();
File dataFile = new File(classLoader.getResource(DATA_PATH).getFile());
CSVReader reader = new CSVReader(new FileReader(clientDataFile));
Ich hoffe, ich sende Genug Kontext, wenn nicht, bitte lass es mich wissen und ich werde bearbeiten (pom.xml ist sehr einfach, nichts Besonderes dort). Nun, dies unter IntelliJ funktioniert, aber wenn ich versuche, es mit Maven zu laufen, wie:
mvn clean package
java -cp ./target/ProjectApp.jar myapp.Main
aus ProjectApp Verzeichnis, Anwendung läuft, aber ich bekomme FileNotFoundException (es lädt fxml Dateien, aber keine CSV-Dateien - ich erhalte Arbeitsanwendung, aber ohne Zugriff auf Daten). Außerdem muss ich beim Zugriff auf fxml-Dateien am Anfang des Pfades "NullPointerException" angeben, aber wenn ich auf csv-Dateien zugreife, muss ich das nicht tun (daher führt der Pfad "/database/ClientData.csv" dazu) NullPointerException)?
@EDIT
Eigentlich mit einer Verpackung zu sein Problem schien - wenn ich Anwendung auf JAR-Datei verpacken, fügt er Ausrufezeichen auf den Weg, so dass der Weg ist falsch (oder zumindest denke ich so).
Dank gelegen, dass eine Menge erklärt . Aber wenn Pfade korrekt deklariert werden - und es funktioniert mit IDE - warum funktioniert es nicht, wenn ich versuche, es manuell mit Maven auszuführen? – 3michalzak
Da Eclipse und andere IDEs benutzerdefinierte Klassenladeprogramme implementieren, um Ressourcen aus dem Projekt zur Laufzeit zu holen, und das funktioniert für Sie :) – mhasan
also ... die eine, die ich bekam, ist falsch, aber weil ich einige benutzerdefinierte Klassenladeprogramme habe IntelliJ, das funktioniert? Was stimmt nicht mit meinem? – 3michalzak