2017-12-26 15 views
0

Hallo Ich arbeite an einem Maven-Projekt mit Abhängigkeit von einem externen jar, das eine Klasse ConfigLoader mit folgenden loader() Methode hat.Eine Klasse von externem jar löst Ausnahme beim Laden von Ressource

public class ConfigLoader { 
    public void initialize() { 
     loader(); 
    } 
    private static void loader() { 
     URL configURL = ConfigLoader.getClass().getResource("runtimeConfiguration.xml"); 
     //some other method calls to which configURL is an argument. 
    } 
    //other methods of ConfigLoader class 
} 

und die Verzeichnisstruktur wie das ist -

src 
|...main 
|.......java 
|.......resources 
|................dev 
|................prod 

beide dev und prod haben eine Datei runtimeConfiguration.xml und der Code genannt, die diese Klasse verwendet, ist

public class Application { 
    private Application application; 
    public static void main(String []args){ 
     application = new Application(); 
     application.invokeConfigLoader(); 
     //additional code 
    } 
    private void invokeConfigLoader() { 
     configLoader.initialize(); 
    } 
} 

Der Fehler, den ich bekomme, ist

could not find: runtimeConfiguration.xml 
and the exception is thrown at the getResource() line in the class from jar. 

Ich habe versucht, den dev-Ordner zu Klassenpfad hinzuzufügen, aber immer noch den gleichen Fehler. Ich möchte diesen Code von Linux-Terminal laufen, und der Befehl, den ich aus Stamm-Verzeichnis gebe (wo alle meine exernal Krüge und Ressourcenordner nach Maven Build sitzt) ist -

java -cp /resources/dev/*:configuration-loader.jar 

Ich benutze IntelliJ 2017,2 und auch versucht, um den Ordner resources/dev als Modulabhängigkeit hinzuzufügen, aber ich bekomme immer den gleichen Fehler. Der Ressourcenordner wird über Projektstruktureinstellungen als Bibliothek hinzugefügt. Ich habe versucht, viel zu suchen, habe aber keine Frage mit diesem Problem gefunden. Bitte helfen Sie mir, denn ich bin neu in dieser umweltbasierten Entwicklung. Danke!

Antwort

0

ConfigLoader.getClass().getResource("runtimeConfiguration.xml"); versuchen, runtimeConfiguration.xml aus dem gleichen Paket eine ConfigLoader ist definiert und nicht von der Wurzel von Classpath. Versuchen Sie, / an runtimeConfiguration.xml anzufügen.

Dies sollte funktionieren oder ConfigLoader.getClass().getResource("/dev/runtimeConfiguration.xml"); abhängig davon, wie Sie Ressourcen zu Ihrem Klassenpfad hinzufügen.

Weitere Informationen finden Sie unter javadoc.

+0

danke für die antwort. Der Code, der diese getResource aufruft, kommt von einem externen Jar, so dass ich dort keine Änderungen vornehmen kann. – humblecoder

+0

Versuchen Sie dann, die Datei unter dem Pfad zu platzieren, der dem Paketnamen von 'ConfigLoader' entspricht. Wenn zum Beispiel "ConfigLoader" unter "com.yourcompant.config" steht, dann setze "runtimeConfiguration.xml" in das Verzeichnis "com/yopurcompany/config". – tsolakp

+0

eine Abfrage, die ich habe, wenn die Konfiguration in 'src/main/java/com/yourcomapany/config' sitzt und die 'runtimeConfiguration.xml' in' src/main/java/resources' sitzt, wo das 'resources'-Verzeichnis ist markiert als Ressourcen root. Dann sollte es funktionieren? – humblecoder

Verwandte Themen