Java-jar : access external configuration file

标签 java configuration jar classpath external

我想做一些我认为并不困难的事情。

我有一个应用程序,我想将其打包为 jar,因为我有大约 30 个依赖项,并且我希望能够部署单个文件。

我有一些配置文件 - 一个属性文件和一个 spring 配置文件,以及我的 log4 props 文件 - 我希望在 jar 外部。我想我希望如果我将它们放在与 jar 相同的目录中,它会在运行时找到它们,但事实并非如此。

在开发过程中,我将这些文件放在我的 eclipse 项目的类路径的根目录下,应用程序可以很好地找到它们。我觉得我错过了 jar/classpath 理论的一些关键方面......

所以我想要的是能够将配置文件和 jar 放在同一目录中,并让应用程序在我使用标准 java -jar 东西运行时找到配置文件。

有没有一种简单的方法可以做到这一点?

最佳答案

我会为后代保留我对这个问题的解决方案。

我认为我可能期望 java -jar 做一些它没有做的事情。

如果您使用常规的 java 命令,您可以将 jar 包含在类路径中,您最终会得到与 java -jar 几乎相同的结果,只是您必须专门命名要使用的类。它看起来像这样:

java -cp .:path/to/Jar.jar com.company.package.Class arg1=val1 arg2=val2 ....

您很可能会构建一个脚本来为您启动程序,因此命令行调用增加的复杂性实际上并不重要,因为无论如何您只会构建一次。

您会看到我包括了“.”作为类路径上的第一项,这意味着与 jar 位于同一目录中的任何内容也将包含在类路径中。当然,jar 中的所有内容也包含在类路径中,因为 jar 本身也在类路径中。

您还会看到,我已经展示了如何仍然可以在命令行上提交参数。这是我开始时不确定的事情,但它按预期工作。

我确信这只是基本的 Java 部署知识,但由于某种原因我缺乏它。

我希望这对其他人有帮助。如果有人能够说“不要费心尝试让 -jar 工作 - 只需使用 -cp 方法”,那肯定会为我节省很多时间......

关于Java-jar : access external configuration file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2232602/

相关文章:

java - setMinimumSize() 不适用于 JButton

Java nio 文件 : readAllBytes vs readAllLines ? 何时使用哪个?

java - 如何获取组合框的值?

java - 在 gradle 多模块项目中未复制 Jar 文件

java - 使用 EclipseLink 在 Oracle 上执行查询时出现奇怪的行为

javascript - 在 chartjs 中,点在顶部和底部的边缘被减半

java - <context :annotation-config> and <context:component-scan> 之间的区别

security - 如何保护 Quarkus 中的/metrics、/health 和/openapi 端点?

java - 在eclipse中调试jar文件

java - 在 IntelliJ 中将 JAR 添加到 WEB-INF/lib 目录的正确步骤是什么