Java 当 运行 一个 jar 时,不遵守带有 -cp 选项的类路径规范

Java not honoring the classpath specification with -cp option when running with a jar

我是运行一个类似下面的程序:

java -cp /deploy/conf -jar test.jar

test.jar 有一个 class 尝试从位于 /deploy/conf 的文件加载属性,如下所示:

Thread.currentThread().getContextClassLoader().getResourceAsStream("config.properties")

问题是我从线程的 class 加载程序和系统 class 加载程序打印出 class 路径,但都不包含我指定的值 /deploy/conf使用 -cp 选项。

如何确保 java 程序将我使用 -cp 选项指定的值传递给线程的 class 加载器?

来自 Tools documentation for java-jar 选项:

When you use this option, the JAR file is the source of all user classes, and other user class path settings are ignored.

通常这意味着您需要使用 Manifest Class-Path 条目。在这种情况下,您不能使用 Class-Path 条目引用绝对路径,因此您必须将文件作为文件而不是资源加载。

您可以尝试直接使用 FileInputStream 而不是资源加载过程,例如使用类似的东西:

FileInputStream in = new FileInputStream ("/deploy/conf/config.properties");