如何在这样的Maven项目中指定相对路径?

时间:2018-05-09 06:00:07

标签: java maven

我有一个Maven项目,父母pom有两个孩子pom:

de-service . (root pom)
de-service-api (child pom)
de-service-web  (child pom)

在根pom中,我有:

 <modules>
        <module>de-service-api</module>
        <module>de-service-web</module>
    </modules>

在de-service-web的资源/模型目录下,我有一个我需要加载的文件:

testModel.model

我将其相对路径指定为(modelName):

de-service-web/src/main/resources/model/testModel.model

然后我有代码加载这个文件:

  try {
                SerializedClassifier model = new SerializedClassifier();
                model.setModelFile(new File(modelName));
                return model;
            } catch (Exception e) {
                e.printStackTrace();
            }

这适用于我的本地计算机,但一旦部署在我的远程服务器上,就会报告错误:

java.io.FileNotFoundException: /home/admin/de-service-web/src/main/resources/model/testModel.model

看起来,相对路径形成的完整路径名缺少根目录的级别,根目录是父pom.xml的根目录: 去服务。

相对路径是相对于&#34; de-service-web&#34;的根,而不是项目的真正根源&#39; de-service&#39;。如何在这个项目结构中指定相对路径?

1 个答案:

答案 0 :(得分:0)

据我所知,如果您正在使用Maven项目,那么resources文件夹中的所有内容都应该在类路径的类路径上提供。以下是加载文件的一种方法:

String fileName = "model/testModel.model";

try {
    ClassLoader classLoader = YourClass.class.getClassLoader();
    File file = new File(classLoader.getResource(fileName).getFile());
    SerializedClassifier model = new SerializedClassifier();
    model.setModelFile(file);
    return model;
}
catch (Exception e) {
    e.printStackTrace();
}

如果这不起作用,那么您应该检查WAR / JAR的类路径,以确保testModel.model实际上可用。