我想从Windows 10 Power Shell启动Java应用程序(即jar文件)。
我有两个脚本:
Start-Process `
-FilePath ".\jdk-17.0.7+7\bin\java.exe" `
-ArgumentList "-classpath myfile.jar MainApplication"
字符串
和/或
Start-Process `
-FilePath ".\jdk-17.0.7+7\bin\java.exe" `
-ArgumentList "-jar myfile.jar"
型
在MAINFEST.MF中,我有:
Main-class: MainApplication
型
因此,第一个脚本启动,但在代码中的某个位置抛出异常。
2023-07-07 18:15:02.397 SEVERE: java.lang.IllegalStateException: HTTP factory has not been set
java.lang.IllegalStateException: HTTP factory has not been set
型
这里的问题是为什么第二个脚本启动应用程序时没有出现这样的异常。是的,有一些警告,但不是这样的,Java应用程序就启动了。
而这一点只发生在Java 17上。所以下一个脚本(使用Java 11)也不会抛出提到的异常。
Start-Process `
-FilePath ".\jdk-11.0.19+7\bin\java.exe" `
-ArgumentList "-classpath myfile.jar MainApplication"
型
我期望两种启动方法是相同的,但实际上,它们在某些地方有所不同。在哪里?
1条答案
按热度按时间qrjkbowd1#
使用
-jar
时,用于启动应用程序的class-path定义如下:Class-Path
条目。(由空格分隔)。解析与包含正在运行的jar的文件夹相关的每个项,并将它们全部添加到类路径中。相比之下,使用
-cp
,您将得到 that 作为class-path。因此,区别在于清单
Class-Path
条目,它在使用-jar
时使用(实际上,它是唯一使用的东西;-jar
和-cp
不能一起使用),并且在使用-cp
标志时根本不使用(这样做时清单将被忽略)。检查清单中的
Class-Path
条目。