我想做一些我认为并不困难的事情。
我有一个应用程序,我想将其打包为 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/