从maven junit中的依赖jar加载文件

时间:2010-12-07 11:19:13

标签: java maven-2 junit

我正在使用maven 2.1.0,并且有一个包含多个模块的项目。 示例模块:

  • SPR-资源
  • SPR-共同

spr-common依赖于spr-resources

spr-resources只包含文件,没有类。

spr-common有一个junit,需要从spr-resources jar加载文件。

我用过:

String fileName = getClass().getResource("/jaskeyfile.3DES").getFile();
is = getClass().getClassLoader().getResourceAsStream(fileName);
is.read(data);

当我在IntelliJ中运行测试时,这是有效的,但是当我进行mvn测试时,当我尝试对其执行read()时,它会因NullPointerException而失败。

为什么会这样?它应该从依赖中读取文件。

此外,spr-common中的pom.xml依赖于spr-resources(尝试使用范围测试,不使用它)

编辑: 我也试过了

getClass().getClassLoader().getResourceAsStream("/jaskeyfile.3DES");

没有运气。

EDIT2: 给定的文件存在于生成的jar中,所以我想它应该是可访问的。

2 个答案:

答案 0 :(得分:3)

仔细检查所有内容

这是一个可以解决的列表:

  1. 文件jaskeyfile.3DES位于spr-resources模块
  2. 中的src/main/resources
  3. 您的本地存储库包含最新版本的spr-resources-x.y.z-SNAPSHOT.jar(或者您已将其发布/直接版本化)并且您肯定已经在其上使用了mvn clean install
  4. spr-common模块引用了spr-resources-x.y.z.jar的正确(命名)版本(编译范围将在测试和编译类路径中看到)
  5. 如果以上所有情况都属实,则getClass().getResourceAsStream("/jaskeyfile.3DES")调用应该有效。我一直在我的项目中使用这种结构,所以你不要在这里要求月亮或任何东西。

答案 1 :(得分:1)

我认为问题可能出在领先的斜线上。我认为这两个都应该有效:

  • getClass().getResourceAsStream("/jaskeyfile.3DES")
  • getClass().getClassLoader().getResourceAsStream("jaskeyfile.3DES")

Class.getResourceAsStream()采用相对于类的包目录的路径,因此它接受前导斜杠。

ClassLoader.getResourceAsStream()已采用绝对路径,因此它不接受前导斜杠。