我有一个没有连接到Internet的Linux盒子。
我已在其上安装了Firefox 24.0
和jre1.7.0_40
(以及1.7.0_17
)
当我使用本地安装在盒子上的Web应用程序启动FF时,我收到一个警告弹出窗口
需要Java更新; YourJava版本已过期
我不会不喜欢Java如何知道'过时'??? 什么比较什么? 我会假设检查oracle.com上的可用版本,如果系统上安装的当前版本太旧,则会丢弃此警告。
或者启动的应用程序本身带有一些关于Java版本的可用信息或编译时使用的信息?
答案 0 :(得分:4)
1.7.0u10 release notes中有一个解释。
JRE依赖于与Oracle服务器的定期检查来确定 如果它(JRE)仍然被认为是最新的可用的 安全修复程序(在安全基准之上)。在过去,如果是JRE 无法联系Oracle服务器,它继续表现为 虽然它仍然是最新版本的安全性, 无限期。
为了避免这个问题,一个不依赖的辅助机制 外部通信,已添加到JDK 7u10。由此 从版本开始,所有JRE都将包含一个硬编码的到期日期。 计算到期日期将在计划发布后结束 下一个重要补丁更新。
我认为,在线检查会从https://javadl-esd-secure.oracle.com/update/baseline.version获取数据。
JRE中的过期日期和硬编码版本存储在deploy.jar中的BuiltInProperties.class
对于1.7.0u45,我们有
public static final boolean JRE_BASELINE_CHECKS_ENABLED = true;
public static final String JRE_EXPIRATION_DATE = "02/14/2014";
public static final String BASELINE_VERSION_131 = "1.3.1_21";
public static final String BASELINE_VERSION_142 = "1.4.2_43";
public static final String BASELINE_VERSION_150 = "1.5.0_55";
public static final String BASELINE_VERSION_160 = "1.6.0_65";
public static final String BASELINE_VERSION_170 = "1.7.0_45";
public static final String BASELINE_VERSION_180 = "1.8.0";
public static final String CURRENT_VERSION = "1.7.0_45";
public static final String CURRENT_NODOT_VERSION = "170";
public static final String DEPLOY_VERSION = "10.45.2.18";
public static final String DEPLOY_NOBUILD_VERSION = "10.45.2";
public static final String DEPLOY_NODOT_VERSION = "10452";
public static final String JAVAWS_NAME = "javaws-10.45.2.18";
public static final String JAVAWS_VERSION = "10.45.2.18";