Bisher bis nicht-modularisierten Java-Zugriff, würden Sie einfach eine Datei in src/main/java/resources
setzen sicherstellen, dass es in Classpath ist und es dann laden mitJava 9 Puzzle - Ressourcendateien von externen Modulen
file = getClass().getClassLoader().getResourceAsStream("myfilename");
von ziemlich irgendwo im Klassenpfad.
Jetzt mit Modulen verdickt sich die Handlung.
Mein Projekt-Setup ist die folgende:
module playground.api {
requires java.base;
requires java.logging;
requires framework.core;
}
Config-Datei in src/main/resources/config.yml
platziert wird.
Projekt ausgeführt wird mit
java -p target/classes:target/dependency -m framework.core/com.framework.Main
Da die Hauptklasse nicht in meinem eigenen Projekt befindet, sondern in einem externen Rahmen-Modul, kann es nicht config.yml
sehen. Jetzt ist die Frage, gibt es eine Möglichkeit, meine Config-Datei irgendwie in das Modul zu setzen oder es zu öffnen? Muss ich die Art ändern, in der die Datei vom Framework-Upstream geladen wird?
Ich habe versucht, "Exporte" oder "öffnet" in Modul-Info, aber es möchte einen Paketnamen, nicht einen Ordnernamen.
Wie erreicht man dies in der besten praktischen Weise, so dass es wie in Java 8 und mit so wenig Änderungen wie möglich funktionieren würde?
Hat 'com.framework.Main' Ressourcen lesen mit' Class.getResource'? – nullpointer
Wenn Code in einem Modul auf eine seiner eigenen Ressourcen zugreifen muss, sollten die Class.getResourceXXX-Methoden verwendet werden (der Parametername ist ein Ressourcenname, kein Dateiname btw). Wenn sich die Ressource in einem anderen Modul befindet und Sie das Module-Objekt haben, können Sie Module.getResourceAsStream verwenden. Wenn Sie den Modulpfad und den Klassenpfad durchsuchen möchten, funktioniert ClassLoader.getResourceXXX wie zuvor, aber das Modul muss das Paket öffnen, das die Ressource enthält. Ressourcen im obersten Verzeichnis oder META-INF/* sind nicht gekapselt, daher funktioniert ClassLoader.getResource. –
In Verbindung stehendes [how-to-let-ein-automatisch-Modul-finden-es-eigenen-Ressourcen-in-java-9] (https://stackoverflow.com/questions/43573809/how-to-let-an- Automatische Modul-Suche-its-eigenen-Ressourcen-in-Java-9) – nullpointer