Java 如何从Maven依赖项项目中读取文件?
我有两个Maven项目A和B。B取决于A 在A中,我在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
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
实际上解决了这个问题。