外部jar中的类在加载Resource时抛出异常

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了外部jar中的类在加载Resource时抛出异常相关的知识,希望对你有一定的参考价值。

嗨,我正在开发一个依赖外部jar的Maven项目,该jar有一个类ConfigLoader,后面有loader()方法。

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
}

目录结构是这样的 -

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

dev和prod都有一个名为runtimeConfiguration.xml的文件,而使用该类的代码是

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

我得到的错误是

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

我尝试将dev文件夹添加到classpath但仍然是相同的错误。我想从linux终端运行这个代码,我从trunk目录中给出的命令(所有我的exernal jar和资源文件夹位于maven构建之后)是 -

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

我正在使用intelliJ 2017.2并尝试将资源/ dev文件夹添加为模块依赖项,但我继续得到相同的错误。资源文件夹通过项目结构设置添加为库。我试图搜索很多,但没有发现任何问题。请帮助我,因为我是这个基于环境的开发的新手。谢谢!

答案

ConfigLoader.getClass().getResource("runtimeConfiguration.xml");将尝试从定义ConfigLoader的同一个包中获取runtimeConfiguration.xml,而不是从类路径的根目录获取。尝试将/附加到runtimeConfiguration.xml

这应该适用于ConfigLoader.getClass().getResource("/runtimeConfiguration.xml");ConfigLoader.getClass().getResource("/dev/runtimeConfiguration.xml");,具体取决于您如何向类路径添加资源。

有关更多信息,请参阅javadoc

以上是关于外部jar中的类在加载Resource时抛出异常的主要内容,如果未能解决你的问题,请参考以下文章

SqlDataReader 在尝试将数据加载到 DataGrid WPF 时抛出异常

客户端调用web Service时抛出 java.lang.reflect.InvocationTargetException 异常

搭建控制器时抛出的调用目标抛出异常

Hadoop外部罐子

RMI加载类异常

Android 5.0+ MediaPlayer 在尝试播放 OPUS 文件时抛出 PreparedFailed 异常