【问题标题】:Loading a file from dependency jar inside maven junit从maven junit中的依赖jar加载文件
【发布时间】:2011-05-21 12:49:31
【问题描述】:

我正在使用 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");

没有运气。

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

【问题讨论】:

  • 嗯,这很奇怪。你有没有尝试过更简单的方法: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 中吗?
  • 如果你运行 mvn test,测试会在这个特定模块上本地运行。如果您需要其他模块 spr-resource,则必须将其定义为测试依赖项,否则您将不会在测试用例中看到它。
  • 我认为你看到了所有的编译和测试依赖。所以没有必要将其定义为测试依赖项。
  • 老问题,但您从未就此提供过反馈!? ://

标签: java maven-2 junit


【解决方案1】:

我相信问题可能出在前导斜杠上。我认为这两个都应该起作用:

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

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

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

【讨论】:

  • 我尝试了两个类加载器,并获得了类 getResourceAsStream,有斜杠和没有斜杠
【解决方案2】:

仔细检查所有内容

这里有一个清单:

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

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

【讨论】:

    猜你喜欢
    • 2015-05-07
    • 2018-12-26
    • 2017-02-01
    • 2014-04-25
    • 2019-06-20
    • 1970-01-01
    • 2015-09-23
    • 1970-01-01
    • 2019-09-03
    相关资源
    最近更新 更多