2017-12-26 28 views
0

こんにちは、loader()メソッドを持つクラスConfigLoaderを持つ外部jarに依存するMavenプロジェクトに取り組んでいます。リソースをロード中に外部jarクラスから例外がスローされる

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 
} 

とディレクトリ構造このようなものです - DEVとPRODの両方がruntimeConfiguration.xml という名前のファイルを持っている

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

と、このクラスを使用するコードが

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

私が得るエラーは

です

私はクラスパスにdevフォルダを追加しようとしましたが、それと同じエラーです。私は(私のすべてのexernalのjarファイルとリソースフォルダは、Mavenのビルド後に座っている場合)されるLinuxの端末からこのコードを実行したい、と私はtrunkディレクトリから与えているコマンド -

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

私はIntelliJの2017.2を使用しても試みていますresources/devフォルダーをモジュールの依存関係として追加するには、同じエラーが発生します。リソースフォルダは、プロジェクト構造の設定を介してライブラリとして追加されます。私は多くを検索しようとしましたが、この問題では何の質問も見つかりませんでした。この環境ベースの開発に慣れていないので、私を助けてください。 ありがとう!

答えて

0

ConfigLoader.getClass().getResource("runtimeConfiguration.xml");runtimeConfiguration.xmlは、ConfigLoaderが定義されているのと同じパッケージから取得し、クラスパスのルートからは取得しません。 /runtimeConfiguration.xmlを追加してみてください。

これは、クラスパスにリソースを追加する方法によって、ConfigLoader.getClass().getResource("/runtimeConfiguration.xml");またはConfigLoader.getClass().getResource("/dev/runtimeConfiguration.xml");で動作するはずです。

javadocを参照してください。

+0

返信ありがとうございます。このgetResourceを呼び出すコードは外部のjarから来ているので、そこに何も変更することはできません。 – humblecoder

+0

次に、 'ConfigLoader'のパッケージ名と同じパスの下にファイルを置いてみてください。たとえば、 'ConfigLoader'が' com.yourcompant.config'の下にある場合、 'runtimeConfiguration.xml'を' com/yopurcompany/config'ディレクトリに置きます。 – tsolakp

+0

configが 'src/main/java/com/yourcomapany/config'にあり、' runtimeConfiguration.xml'が 'src/main/java/resources'にあり、' resources'ディレクトリがリソースrootとしてマークされています。それはうまくいくはずですか? – humblecoder

関連する問題