我该如何使用其他Maven模块的资源?我的目标是提供一个AbstractImportClass
以及要在特定的Maven模块中导入的文件。并在扩展此类的其他模块中使用此模块。Maven使用来自其他模块的资源?
比方说ModuleA
包含src/main/java/MyAbstractImportClass.java
和src/main/resources/MyImport.csv
我现在想用抽象进口类ModuleB
。或者说,我会扩展它,使用abstract-fileimport和一些自定义函数。 Then ModuleC
也使用摘要的导入和一些自定义函数。
问题是:抽象类中的导入符合reader
和InputStream
。当我只执行ModuleA时,一切都很好。
但是,当我试图通过maven pom包含模块,然后扩展模块来调用导入,那么我得到NullPointerException
在读者使用的线路。
所以很明显,我不能使用这种方式的外国模块资源。
但我该如何利用这个?
更新:
模块A:
src/main/java/path/to/MyClassA.java
src/main/resources/path/to/test.txt
abstract class MyClassA {
public static String TESTFILE = test.txt;
List<String> doImport(String filename) {
InputStream fileStream = resourceClass.getResourceAsStream(filename);
//some precessing
return list;
}
}
模块B:
src/main/java/path/to/MyClassB.java
class MyClassB implements MyClassA {
List<String> list = doImport(TESTFILE);
}
如果我把MyClassB在同一目录为A,那么一切工作正常。 如果我在自己的模块中构建B,我会为InputStream获取NullPointer,这意味着找不到文件。
好吧,我的绝对路径是:'de/my/path/to/Super/test.properties'?或开始'/ de/my ...'?如果Super类可以获取包含在其相应资源/路径/到/文件夹中的文件,那么这将是足够的抽象。 – membersound
可能是以“/ resource”开头的/或相对路径的完整路径 – maximdim
是的,绝对类路径路径以“/”开头。如果你想使用Super的相对路径,只要确保使用'Super.class.getResourceAsStream()'而不是'getClass()。getResourceAsStream()'。后者是多态的,前者不是。 –