【问题标题】:A class from external jar throws exception while loading Resource加载资源时来自外部 jar 的类引发异常
【发布时间】:2018-06-07 13:13:48
【问题描述】:

您好,我正在开发一个依赖于外部 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 文件夹添加到类路径,但仍然是同样的错误。我想从 linux 终端运行这段代码,我从主干目录(我所有的外部 jars 和资源文件夹在 maven 构建后所在的位置)给出的命令是 -

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

我正在使用 intelliJ 2017.2 并且还尝试将 resources/dev 文件夹添加为模块依赖项,但我不断收到相同的错误。资源文件夹通过项目结构设置添加为库。我尝试进行了很多搜索,但没有发现与此问题有关的任何问题。请帮助我,因为我是这种基于环境的开发的新手。 谢谢!

【问题讨论】:

    标签: java maven intellij-idea jar classloader


    【解决方案1】:

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

    这应该可以在 ConfigLoader.getClass().getResource("/runtimeConfiguration.xml");ConfigLoader.getClass().getResource("/dev/runtimeConfiguration.xml"); 工作,具体取决于您将资源添加到类路径的方式。

    请参阅javadoc 了解更多信息。

    【讨论】:

    • 感谢您的回复。调用此 getResource 的代码来自外部 jar,因此我无法在那里进行任何更改。
    • 然后,尝试将文件放在与ConfigLoader的包名相同的路径下。例如,如果ConfigLoadercom.yourcompant.config 下,则将runtimeConfiguration.xml 放在com/yopurcompany/config 目录下。
    • 我有一个查询,如果配置位于 src/main/java/com/yourcomapany/config 中,runtimeConfiguration.xml 位于 src/main/java/resources 中,resources 目录被标记为资源根目录。那么它应该工作吗?
    • 它应该位于src/main/java/resources/com/yourcomapany/config
    • 您好,这两种解决方案都不起作用。感谢您的回复。
    猜你喜欢
    • 1970-01-01
    • 2017-04-25
    • 1970-01-01
    • 1970-01-01
    • 2014-09-22
    • 2011-10-10
    • 2015-05-03
    • 1970-01-01
    • 2020-09-02
    相关资源
    最近更新 更多