Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从Maven依赖项项目中读取文件?_Java_Maven - Fatal编程技术网

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

Java 如何从Maven依赖项项目中读取文件?,java,maven,Java,Maven,我有两个Maven项目A和B。B取决于A 在A中,我在src/main/resources文件夹中有一个文件someFile.txt public class SomeAClass { public void someMethod() { final InputStream inputStream = Thread.currentThread() .getContextClassLoa

我有两个Maven项目A和B。B取决于A

在A中,我在
src/main/resources
文件夹中有一个文件
someFile.txt

public class SomeAClass
{
    public void someMethod()
    {
        final InputStream inputStream =
                Thread.currentThread()
                        .getContextClassLoader()
                        .getResourceAsStream("someFile.txt");
        final List<String> lines = IOUtils.readLines(inputStream);

        ...
    }
}
公共类SomeAClass
{
公共方法()
{
最终输入流输入流=
Thread.currentThread()
.getContextClassLoader()
.getResourceAsStream(“someFile.txt”);
最终列表行=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的控制台应用程序)?

您确定问题存在吗,因为我有类似的方法,而且它工作正常

那是我第一次尝试

如果您在测试中使用someFile.txt作为资源(只有在那里,如果您在主项目中使用,请忽略帖子),而不是使用
src/main/resources
,那么最好将该文件和其他文件放在
src/test/resources

但是

如果您将这些测试文件放在
src/test/resources
中,请记住,测试资源不包含在项目工件中,因此您无法访问它们,尽管您在pom中包含了依赖项

我做了什么(像你一样)

创建新模块(测试资源)并将资源放入
src/main/resources
。该模块在我需要的具有测试范围的项目中用作依赖项。但我使用的是ClassPathResource

    ClassPathResource resource = new ClassPathResource("the_file"); 
    resource.getInputStream()

您是否从IDE运行此代码?否,我运行
mvn clean package
,然后使用
java-jar target/myjar.jar
运行生成的Spring Shell应用程序。这就是NPE发生的地方。你有两个罐子,对吗?我不知道你的意思。对于A,我执行
mvnclean安装
,它将A的JAR放入本地Maven存储库。B在
pom.xml
中依赖于a。现在,我不在构建它的机器上,所以我不能说A的JAR是否嵌入到B的JAR中。或者您可以将A.jar添加到类路径java-cpa.jar-jartarget/myjar.jar,谢谢。你能在这里发布你用来读取文件的代码吗(类似于Thread.currentThread().getContextClassLoader().getResourceAsStream(“someFile.txt”)
)?ClassPathResource=new ClassPathResource(“the_文件”);getInputStream()使用
ClassPathResource
实际上解决了这个问题。