我正在使用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中,因此我认为它应该可以访问。

    最佳答案

    仔细检查所有内容

    以下是要处理的列表:

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

  • 如果以上所有条件均成立,则您的getClass().getResourceAsStream("/jaskeyfile.3DES")调用应该可以工作。我在项目中一直使用这种结构,因此您在这里不需要月亮或其他任何东西。

    08-25 12:23