指定其他目录配置文件运行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
相关产品推荐
相关产品推荐

