为什么java.class.path属性总是返回jar的位置?

为什么java.class.path属性总是返回jar的位置?,java,executable-jar,Java,Executable Jar,在本文中,有人说“只要classpath只包含一个条目,就可以[获取可运行jar文件的位置]” 这是我的代码: public static void main(String[] args) { System.out.println(System.getProperty("java.class.path")); } 我创建了一个可运行的jar(使用Eclipse导出),当我运行它时,不管我将CLASSPATH设置为什么,我只得到可运行jar的路径 例如: C:\TEMP

在本文中,有人说“只要classpath只包含一个条目,就可以[获取可运行jar文件的位置]”

这是我的代码:

   public static void main(String[] args) {
       System.out.println(System.getProperty("java.class.path"));
   }
我创建了一个可运行的jar(使用Eclipse导出),当我运行它时,不管我将CLASSPATH设置为什么,我只得到可运行jar的路径

例如:

C:\TEMP>set CLASSPATH=C:\TEMP\BackupCompilations\Photos;C:\FreeOCR\tessdata

C:\TEMP>echo %CLASSPATH%
C:\TEMP\BackupCompilations\Photos;C:\FreeOCR\tessdata

C:\TEMP>set CLASSPATH
CLASSPATH=C:\TEMP\BackupCompilations\Photos;C:\FreeOCR\tessdata

C:\TEMP>java -jar C:\Programs\bin\Test_one_prop.jar
C:\Programs\bin\Test_one_prop.jar
我还尝试在命令行上使用-cp

有人能给出一个反例,在这个反例中,它返回的不仅仅是我正在运行的jar文件的位置

(应该理解,在Eclipse中,它会返回项目的bin文件夹。)

这是我唯一关心的用例:将此程序作为可运行的jar运行

谢谢。

美国

-jar

[…]
使用此选项时,JAR文件是所有用户的源文件 类和其他用户类路径设置将被忽略

当使用
-jar
选项时,
.jar
本身被用作整个类路径


有人能想出一个反例吗 除了我正在运行的jar文件的位置之外,还有什么其他的吗

在正常情况下,不会。但是,它只是一个属性,所以你可以更改它的值

System.setProperty("java.class.path", "garbage");

正如nramaker在其声明中所建议的,您可以通过清单文件提供要包含在类中的其他jar的位置。Java教程解释了如何做到这一点:

但是,这不会更改
java.class.path
属性的值。如果要从清单文件中提取
类路径
属性的值,可以使用中提供的解决方案:

例如,

URLClassLoader cl = (URLClassLoader) Example.class.getClassLoader();
try {
    URL url = cl.findResource("META-INF/MANIFEST.MF");
    Manifest manifest = new Manifest(url.openStream());
    System.out.println(manifest.getMainAttributes().getValue(new Attributes.Name("Class-Path")));
} catch (IOException e) {
    // handle
}

运行可执行jar文件时,类路径由jar文件内的清单文件中的内容定义。这将覆盖在命令行上传递或在环境中设置的任何内容


我很感激这两个答案。伟大的信息,遵循了一些链接在每个;稍后将阅读更多内容。(现在必须做一些有报酬的工作。)