获取依赖文件的正确路径

时间:2018-10-03 14:00:15

标签: java

我有一个Java项目,它导入了我编写的模块。 Java项目称为cg-lambda,模块称为cg-corecg-core被作为依赖项导入cg-lambda中,例如

dependencies {
    ...
    compile 'com.cg:cg-core'
    ...
}

我在cg-core中有一个名为ApiConfiguration的类,该类可加载并解析yaml文件。

package com.cg.config.guice;

public class ApiConfiguration {

    public static ApiConfiguration fromLocation() {

        try {
            String configurationLocation = "src/main/resources/configuration/env_local.yml";

            final String absoluteFile = new File(configurationLocation).getAbsolutePath();
            ....
        } catch (Exception e) {

        }
    }

    ....
}

yaml文件位于/Users/mark/repos/server-side/cg-core/src/main/resources/configuration/

我从ApiConfiguration.fromLocation()中的班级叫cg-lambda

import com.cg.config.guice.ApiConfiguration;

public class OrderHandler {    
    public OrderHandler() {
        final ApiConfiguration apiConfiguration =
                    ApiConfiguration.fromLocation();

        ....
        ....

调试时,我看到absoluteFile/Users/mark/repos/server-side/cg-lambda/src/main/resources/configuration/env_local.yml

即即使ApiConfiguration位于cg-lambda中,路径也指向cg-core,而不是cg-core。有可能获得正确的路径吗?

2 个答案:

答案 0 :(得分:0)

这就像路径命名一样,所以我猜src / main / resources被视为资源目录,因此可以假定这被视为类路径资源,因此只需使用OrderHandler.class.getClassLoader()。 getResourceAsStream(“ configuration / env_local.yml”);事实是,这是一个InputStream,因此您需要为ApiConfiguration使用其他构造函数。但是您仍然无法获取路径,而只是加载资源。并尝试这样做,因为当您将此配置打包到JAR / WAR中时,将无法使用path对其进行访问。

答案 1 :(得分:0)

由于资源将打包在cg-core模块中,并且当您的应用运行时,您提供的路径将不存在。

正确的方法是加载文件并获取绝对路径。

String configurationLocation = "configuration/env_local.yml";

final String absoluteFile = new File(ApiConfiguration.class.getClassLoader().getResource(configurationFileLocation).getFile()).getAbsolutePath();