2010-12-07 59 views
1

我正在使用maven 2.1.0并拥有一个包含多个模块的项目。 实施例的模块:从maven junit中的依赖关系jar中加载文件

  • SPR-资源
  • SPR-共同

SPR-共同对SPR-资源的依赖

SPR-资源仅包含文件,没有类。

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

我用:

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

当我在的IntelliJ运行测试工作的,但是当我做MVN测试时,出现NullPointerException异常,当我尝试做阅读()就可以了。

这是怎么发生的?它应该从依赖读取文件就好了。

此外,在pom.xml的SPR-共同对SPR-资源依赖性(均与范围的测试,没有它试过)

编辑: 我也

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

试过,没有运气。

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

+0

嗯,那很奇怪。你尝试了一个更简单的方法:`InputStream is = getClass()。getResourceAsStream(“/ java/pkg/with/your/file/filename.txt”);`? `spr-resources`依赖性是否真的在`pom.xml`文件中定义,而不仅仅是在你的IDE中?如果在CLASSPATH上找不到该资源,则返回的流为“null”。编辑:文件是否真的在`src/main/resources/java/pkg/with/your/file/filename.txt`目录下的`spr-resources`中? – 2010-12-07 11:31:52

+0

如果您运行mvn测试,测试在本地运行在此特定模块上。如果你需要另一个模块spr-resource,你必须将它定义为测试依赖关系,否则你不会在你的测试用例中看到它。 – khmarbaise 2010-12-07 13:04:37

回答

1

我相信这个问题可能与主导斜线。我认为这两个应该工作:

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

Class.getResourceAsStream()需要相对于类的包目录的路径,因此接受斜线。

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

3

检查一切仔细

下面列出了合作,通过:

  1. 文件jaskeyfile.3DES位于SPR-资源模块
  2. 本地资源库包含最新版本的内src/main/resources spr-resources-xyz-SNAPSHOT.jar(或者你已经发布了它/直接版本化),并且你已经使用了mvn clean install
  3. spr-common模块引用了spr-resources-x.y.z的正确(命名)版本。jar(编译的范围将在测试和编译类路径中看到)

如果以上全部都是真的,那么您的getClass().getResourceAsStream("/jaskeyfile.3DES")调用应该可以工作。我一直在我的项目中使用这种结构,所以你不会要求月亮或任何东西。