使用mvn exec:java从另一个maven模块加载资源不起作用

时间:2016-05-28 13:42:10

标签: java maven

我有一个具有这种结构的maven项目:

parent
-----module1
--------src
------------main
-----------------java
----------------------Loader.java
-----------------resources
-------------------------file1.txt
-----module2
--------src
------------main
-----------------java
-------------------------CallLoader.java

所以Loader.java,加载files1.txt。我从module2的CallLoader.java调用此类。这是我用的代码

Loader.java

private static File getResourceFile(String fileName){
        try {
            URL resource = GraphUtil.class.getClassLoader().getResource(fileName);
            return new File(resource.getPath());
        } catch (Throwable e) {
            throw new RuntimeException("Couldn't load resource: "+fileName, e);
        }
}

其中fileName="file1.txt"

我收到错误,因为文件绝对路径如下所示:

file:/home/moha/.m2/repository/my/package/name/%7Bproject.version%7D/base-%7Bproject.version%7D.jar!/file1.txt

我究竟做错了什么?

1 个答案:

答案 0 :(得分:2)

将文件内容作为流获取,以便能够从jar文件中读取资源,这是导致问题的根本原因。换句话说,使用getResourceAsStream代替getResource

您也可以返回URL而不是File,然后再调用openStream(),以便在需要时阅读。

NB1:该网址的类型为jar:file/...,无法由班级File

管理

NB2:要将URL转换为File,正确的代码为new File(resource.toURI())