我有两个Maven项目A和B. B取决于A。
在A中,我在someFile.txt
文件夹中有一个文件src/main/resources
。
public class SomeAClass
{
public void someMethod()
{
final InputStream inputStream =
Thread.currentThread()
.getContextClassLoader()
.getResourceAsStream("someFile.txt");
final List<String> lines = IOUtils.readLines(inputStream);
...
}
}
在A的测试中,这很好。
现在想象一下我想在B中使用相同的代码,包括从src/main/resources/someFile.txt
读取数据的能力。
现在,从项目B调用SomeAClass.someMethod()
会导致NullPointerException,我怀疑它是因为找不到src/main/resources/someFile.txt
。
如何更改获取src/main/resources/someFile.txt
输入流的代码,以便在A的单元测试和执行B(B是基于Spring Shell的控制台应用程序)时都能正常工作?
答案 0 :(得分:2)
你确定问题是存在的,因为我有类似的方法,它运作正常。
这是我的第一次尝试
如果您在测试中使用someFile.txt作为资源(并且仅在那里,如果您在主项目中使用,请忽略帖子),而不是使用src/main/resources
,也许最好是放置该文件和src/test/resources
中使用的其他文件。
<强>但是强>
如果您将这些测试文件放在src/test/resources
中,请记住测试资源不包含在项目工件中,因此您无法访问它们,只要您在pom中包含依赖项。
我做了什么(像你的一样)
创建新模块(test-resources)并将资源放在src/main/resources
中。该模块在我需要的项目中用作测试范围的依赖项。但我使用的是ClassPathResource。
ClassPathResource resource = new ClassPathResource("the_file");
resource.getInputStream()