Tam*_*ias 3 java executable-jar
在获取JAR文件的位置时,只要你的类路径只包含一个条目,就会说"这可以[获取可运行的jar文件的位置]".
这是我的代码:
public static void main(String[] args) {
System.out.println(System.getProperty("java.class.path"));
}
Run Code Online (Sandbox Code Playgroud)
我创建了一个可运行的jar(使用Eclipse Export),当我运行它时,无论我将CLASSPATH设置为什么,我只获得runnable 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
Run Code Online (Sandbox Code Playgroud)
我也尝试在命令行上使用-cp.
有人可以提出一个反例,其中返回的东西比我正在运行的jar文件的位置更多/更多吗?
(理解在Eclipse中它返回我的项目的bin文件夹.)
这是我唯一关注的用例:将此程序作为可运行的jar运行.
谢谢.
州的手动输入java
-jar[...]
使用此选项时,JAR文件是所有用户类的源,并忽略其他用户类路径设置.
使用该-jar选项时,它.jar本身用作整个类路径.
有人可以提出一个反例,其中返回的东西比我正在运行的jar文件的位置更多/更多吗?
一般情况下,没有.但是,它只是一个属性,因此您可以更改其值.
System.setProperty("java.class.path", "garbage");
Run Code Online (Sandbox Code Playgroud)
正如nramaker在他们的回答中建议的那样,您可以通过MANIFEST文件提供其他罐子的位置以包含在类中.Java教程解释了如何执行此操作:
但是,这不会改变java.class.path属性的值.如果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
}
Run Code Online (Sandbox Code Playgroud)