powershell 从Windows 10 Power Shell启动Java应用程序的不同方式并不相等

yk9xbfzb  于 2023-08-05  发布在  Shell
关注(0)|答案(1)|浏览(138)

我想从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"


我期望两种启动方法是相同的,但实际上,它们在某些地方有所不同。在哪里?

qrjkbowd

qrjkbowd1#

使用-jar时,用于启动应用程序的class-path定义如下:

  • 把jar包括进去--那部分是显而易见的。
  • 读取jar清单的Class-Path条目。(由空格分隔)。解析与包含正在运行的jar的文件夹相关的每个项,并将它们全部添加到类路径中。

相比之下,使用-cp,您将得到 that 作为class-path。
因此,区别在于清单Class-Path条目,它在使用-jar时使用(实际上,它是唯一使用的东西; -jar-cp不能一起使用),并且在使用-cp标志时根本不使用(这样做时清单将被忽略)。
检查清单中的Class-Path条目。

相关问题