我有一个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();