You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

指定其他目录配置文件运行Jar包失败问题求助

问题

我有一个依赖配置文件(property file)的Jar包:

  • Jar包路径:C:\MIImageUtility\runableJar\
  • 场景1:将Jar包与配置文件放在同一目录时,执行命令java -jar ImageUtilityFinal.jar可正常运行;
  • 场景2:将配置文件移至其他目录(路径为C:\MIImageUtility\runableJar\config\ENV.properties),执行命令java -jar ImageUtilityFinal.jar --config.location="C:\MIImageUtility\runableJar\config\ENV.properties"时出现错误;

代码片段(读取配置文件的核心逻辑):

static String envfilePath = System.getProperty("user.dir") + "\\ENV.properties";

报错信息:

java.io.FileNotFoundException: C:\MIImageUtility\runableJar\ENV.properties (The system cannot find the file specified)
        at java.base/java.io.FileInputStream.open0(Native Method)
        at java.base/java.io.FileInputStream.open(FileInputStream.java:216)
        at java.base/java.io.FileInputStream.<init>(FileInputStream.java:157)
        at java.base/java.io.FileInputStream.<init>(FileInputStream.java:111)
        at java.base/java.io.FileReader.<init>(FileReader.java:60)
        at Ambra.Ambra.DicomPushLoadTest.main(DicomPushLoadTest.java:74)
解决方案

问题核心是代码完全未处理命令行传入的--config.location参数,始终硬编码从当前工作目录(user.dir)加载ENV.properties,导致传入的路径参数无效。

1. 修改代码逻辑,支持读取命令行参数

替换原有的envfilePath初始化代码,改为优先读取命令行参数中的配置路径,无参数时使用默认路径:

情况1:参数格式为--config.location "路径"(空格分隔)

import java.util.Arrays;

public class DicomPushLoadTest {
    static String envfilePath;

    public static void main(String[] args) {
        // 设置默认路径
        envfilePath = System.getProperty("user.dir") + "\\ENV.properties";
        
        // 遍历命令行参数,匹配目标参数
        for (int i = 0; i < args.length; i++) {
            if ("--config.location".equals(args[i]) && i + 1 < args.length) {
                envfilePath = args[i + 1];
                break;
            }
        }
        
        // 后续读取配置文件的逻辑保持不变,使用envfilePath即可
        // ... 你的文件读取代码
    }
}

情况2:参数格式为--config.location=路径(等号连接)

如果习惯用等号连接参数,调整解析逻辑:

import java.util.Arrays;

public class DicomPushLoadTest {
    static String envfilePath;

    public static void main(String[] args) {
        envfilePath = System.getProperty("user.dir") + "\\ENV.properties";
        
        for (String arg : args) {
            if (arg.startsWith("--config.location=")) {
                envfilePath = arg.substring("--config.location=".length());
                break;
            }
        }
        
        // 后续读取配置文件的逻辑保持不变
        // ... 你的文件读取代码
    }
}

2. 调整执行命令(可选,匹配代码解析逻辑)

如果用空格分隔参数,命令可写为:

java -jar ImageUtilityFinal.jar --config.location "C:\MIImageUtility\runableJar\config\ENV.properties"

如果用等号连接参数,命令可写为:

java -jar ImageUtilityFinal.jar --config.location="C:\MIImageUtility\runableJar\config\ENV.properties"

内容的提问来源于stack exchange,提问作者Jyoti Prakash Mallick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 07:12:51