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

Java 从maven junit中的依赖项jar加载文件,java,maven-2,junit,Java,Maven 2,Junit,我正在使用maven 2.1.0,有一个包含多个模块的项目。 示例模块: spr资源 spr通用 spr common依赖于spr资源 spr资源只包含文件,不包含类 spr common有一个junit,其中需要从spr资源jar加载一个文件 我用过: String fileName = getClass().getResource("/jaskeyfile.3DES").getFile(); is = getClass().getClassLoader().getResourceAsSt

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

  • spr资源
  • spr通用
spr common依赖于spr资源

spr资源只包含文件,不包含类

spr common有一个junit,其中需要从spr资源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资源(在使用范围测试和不使用范围测试的情况下都进行了尝试)

编辑: 我也试过了

getClass().getClassLoader().getResourceAsStream("/jaskeyfile.3DES");
没有运气

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

我认为问题可能在于前导斜杠。我认为这两种方法都应该有效:

  • getClass().getResourceAsStream(“/jaskeyfile.3DES”)
  • getClass().getClassLoader().getResourceAsStream(“jaskeyfile.3DES”)
Class.getResourceAsStream()
采用相对于类的包目录的路径,因此它接受前导斜杠


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

仔细检查所有内容

下面是一个要处理的列表:

  • 文件
    jaskeyfile.3DES
    位于spr资源模块内的
    src/main/resources
  • 您的本地存储库包含最新版本的spr-resources-x.y.z-SNAPSHOT.jar(或者您已经发布了它/直接对它进行了版本控制),并且您肯定已经在其上使用了mvn clean install
  • spr公共模块正在引用spr-resources-x.y.z.jar的正确(命名)版本(编译范围将在测试和编译类路径上看到)

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

    mm,这很奇怪。您是否尝试过更简单的方法:
    InputStream is=getClass().getResourceAsStream(“/java/pkg/with/your/file/filename.txt”)
    spr资源
    依赖关系是否真的是在
    pom.xml
    文件中定义的,而不仅仅是在IDE中定义的?如果在类路径上找不到资源,则返回的流为
    null
    。编辑:文件是否真的位于
    src/main/resources/java/pkg/with/your/file/filename.txt
    目录下的
    spr resources
    中?如果运行mvn测试,则测试将在该特定模块上本地运行。如果您需要其他模块spr资源,您必须将其定义为测试依赖项,否则您将无法在测试用例中看到这一点。我认为您可以看到所有编译和测试依赖项。所以不必将其定义为测试依赖项。这是一个老问题,但您从未对此给出反馈!?:/我尝试了classloader和getResourceAsStream两个类,有斜杠和没有斜杠