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");
我是运行一个类似下面的程序:
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");