如何从Maven依赖项目中读取文件?

时间:2015-02-25 05:10:42

标签: java maven

我有两个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的控制台应用程序)时都能正常工作?

1 个答案:

答案 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()