我有一个Java项目,它导入了我编写的模块。 Java项目称为cg-lambda,模块称为cg-core。在cg-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

即路径是到cg-lambda,而不是cg-core-即使ApiConfiguration在cg-core中。是否有可能获得正确的路径?

最佳答案

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

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

String configurationLocation = "configuration/env_local.yml";

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

10-08 02:53