如何禁止 JNLP 中的某个 Java 版本?

How to disallow a certain Java version in JNLP?

有时 Java 中存在严重的回归错误,导致我们的产品无法使用。所以我想禁止相关版本,例如当前 8u161 和 8u162(错误 JDK-8195830)。

我如何在 JNLP 中这样做? docs 仅提及 + 作为通配符。那么唯一可能的方法是列出所有其他 Java 版本吗?喜欢

<java version="1.8.0_05"/>
<java version="1.8.0_11"/>

...直到...

<java version="1.8.0_151"/>
<java version="1.8.0_152"/>

?

更新: 所以结果看起来像这样。

<java version="1.8.0_172+ 1.8.0_152 1.8.0_151 1.8.0_144 1.8.0_141 1.8.0_131 1.8.0_121 1.8.0_112 1.8.0_111 1.8.0_102 1.8.0_101 1.8.0_92 1.8.0_91 1.8.0_74 1.8.0_73 1.8.0_72 1.8.0_71 1.8.0_66 1.8.0_65 1.8.0_60 1.8.0_51 1.8.0_45 1.8.0_40 1.8.0_31 1.8.0_25 1.8.0_20 1.8.0_11 1.8.0_05"/>

结论: 最后我决定不在 JNLP 中提供任何版本限制,因为弹出窗口说它建议无论如何都启动应用程序——这与我必须告诉用户什么。

问题似乎是 *racle 似乎已经放弃了对加载和使用早期 JRE 的支持,除了最新的 JRE。 您的方法似乎是唯一的纯 JNLP 方式,此处也是 suggested

你也可以试着用空格隔开一大行来写。我唯一要更改的是顺序,以便最高的是顶部。

"If several JREs are specified, this indicates a prioritized list of the supported JREs, with the most preferred version first."

您可能想查看已发布的类似问题here

排除特定 java 版本的另一种方法是在您的应用程序中检查它。

public static void main(String [] args) {
  String version = System.getProperty("java.version");
  if("1.8.0_161".equals(version) || "1.8.0_162".equals(version){
    //print an error dialog
  }
  else{
   //continue normal flow
  }
}

在之前的应用程序中,我什至走得更远,有两个不同的 Web 应用程序:一个 "light" Web 应用程序在实际应用程序之前启动。这个轻型 Web 应用程序几乎没有关于 java 版本的要求(甚至从 1.4 开始),然后它会检查所有必要的要求(Java 版本,OS,RAM,CPU, 文件 ...).一切顺利后才开始实际应用。