如何正确导入maven项目结构中的文件?

时间:2014-11-07 12:28:38

标签: java file maven resources classloader

我有一个xml格式的配置文件,我需要加载到我的java代码中。在测试时,我已经通过它的绝对URL导入了它,但现在我要将项目编译和部署为jar,并且不再适用了。

根据以前的经验,我认为正确的方法是使用ClassLoader,但我遇到了一些困难。也许是因为我的项目设置,我不知道。我想我能够做到这一点,正如我过去所做的那样,但我真的想确保我以标准,传统和/或正确的方式做到这一点,这样我就不需要每次都进行实验这就出现了。

以下是我尝试实施的代码:http://www.mkyong.com/java/java-read-a-file-from-resources-folder/

但是,这段代码:

ClassLoader classLoader = getClass().getClassLoader();
File file = new File(classLoader.getResource("file/test.xml").getFile());

由于需要抽象类的静态方法中的文件,我无法使用。因此我用以下代码将其切换出来:

ClassLoader classLoader = XmlConfigLoader.class.getClassLoader();
File file = new File(classLoader.getResource("configuration.xml").getFile());

XmlConfigLoader是包含的类。 "configuration.xml"位于src/main/resources - 文件夹中,就像示例中的"file/test.xml"

一样

我在调试模式下运行代码,发现file的路径错误。它不是查看src/main/resources,而是指向target/classes

  1. 我需要设置默认资源文件夹的设置选项吗?
  2. src / main / resources是存储这样的文件的常规位置吗?
  3. 我在此设置中加载ClassLoader是否正确?
  4. 作为附加信息,这是一个Maven项目。

    更新

    我的当前代码实际上工作得很好,除了一个bug。该文件在编译时自动传输到target/classes文件夹。但是,url中的空格被%20替换,我必须手动更改它们以使系统找到该文件。我相信有更好的解决方案。任何人吗?

1 个答案:

答案 0 :(得分:0)

文件具有路径“target / classes”是有道理的,因为这是jar的清单文件中的Class-Path。如果您想让它在其他地方查找,请编辑清单文件并将资源类路径附加到它。

有关如何在Setting classpath for a JAR

更改jar类路径的详细信息

当您使用maven时,最简单的方法是将资源文件放入src / main / resources / META-INF目录,maven将为您排序。见http://maven.apache.org/guides/getting-started/index.html#How_do_I_add_resources_to_my_JAR