Java 从maven junit中的依赖项jar加载文件
我正在使用maven 2.1.0,有一个包含多个模块的项目。 示例模块: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
- spr资源
- spr通用
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
中如果以上都是真的,那么您的
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两个类,有斜杠和没有斜杠