为了账号安全,请及时绑定邮箱和手机立即绑定

获取依赖中文件的正确路径

获取依赖中文件的正确路径

SMILET 2021-10-27 10:14:45
我有一个 java 项目,它导入了我写的一个模块。调用 Java 项目并调用cg-lambda模块cg-core。cg-core在cg-lambdaeg 中作为依赖项导入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. 是否有可能获得正确的路径?
查看完整描述

2 回答

?
精慕HU

TA贡献1845条经验 获得超8个赞

这是maven之类的路径命名,所以我猜测src/main/resources被视为资源目录,所以你可以假设这被认为是一个类路径资源,所以只需使用OrderHandler.class.getClassLoader().getResourceAsStream("配置/env_local.yml"); 问题是它是一个 InputStream,所以你需要一个不同的 ApiConfiguration 构造函数。但是您仍然无法获得路径,而只能加载您的资源。并尝试这样做,因为当您将此配置打包在 JAR/WAR 中时,将无法使用路径访问它。



查看完整回答
反对 回复 2021-10-27
?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

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


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


String configurationLocation = "configuration/env_local.yml";


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



查看完整回答
反对 回复 2021-10-27
  • 2 回答
  • 0 关注
  • 165 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信