如何更新到 Java 7 而不干扰依赖 Java 6 的应用程序?

如何更新到 Java 7 而不干扰依赖 Java 6 的应用程序?

我在 ubuntu 上运行 jetty 7.6。它正在提供实时流量。该特定版本的 jetty 需要 java 6。

现在我想在那台机器上安装 Java 7。这会弄乱我当前正在运行的 Jetty 实例吗?

另外,更新到 Java 7 是否会让 ubuntu 选择它作为下次调用 Java 应用程序时使用的默认 jdk?如果可能的话,我想:

  1. 安装 java 7 jdk。
  2. 不要将其设为默认值,但允许我使用 java 7 明确调用应用程序。

这将允许我测试新版本的 jetty(需要 java 7)而不会弄乱我的实时安装。

答案1

根据您安装 Java 6 的方式,答案可能会略有不同。

.deb通过或安装 Java 时apt-get,安装脚本通常会利用 Debian 替代系统。Debian 替代系统只是一种简单的解决方案,通过在不同位置创建符号链接,在同一系统上拥有多个应用程序的多个运行时/版本。

请注意,如果您从二进制文件或源代码安装 Java,则这可能不适用(除非您自己配置它)。

要检查 Java 是否正在利用替代方案,请运行update-alternatives --list java。这将返回:

update-alternatives: error: no alternatives for java.

或者

java - auto mode
  link currently points to /usr/lib/jvm/java-6-openjdk-i386/jre/bin/java
/usr/lib/jvm/java-6-openjdk-i386/jre/bin/java - priority 1061
  slave java.1.gz: /usr/lib/jvm/java-6-openjdk-i386/jre/man/man1/java.1.gz
/usr/lib/jvm/java-7-openjdk-i386/jre/bin/java - priority 1051
  slave java.1.gz: /usr/lib/jvm/java-7-openjdk-i386/jre/man/man1/java.1.gz
Current 'best' version is '/usr/lib/jvm/java-6-openjdk-i386/jre/bin/java'.

如果您的 Java 安装利用了替代系统,则可以轻松安装多个版本,而不会干扰现有的运行时。在上面的示例中,我安装了两个版本的 Java,openjdk6 和 openjdk7。如果我运行/usr/bin/java -version,我将获得“最佳”替代方案,该替代方案当前指向 openjdk6。我还可以切换要使用的“最佳”替代方案,以便所有使用默认值的应用程序java都将指向其中一个。

总之,如果您的应用程序明确调用 java 二进制文件(而不是替代文件),那么您就没问题。如果您的应用程序正在使用/usr/bin/java,那么您需要确保安装另一个 java 版本不会与系统替代文件冲突。

要了解有关替代方案的更多信息以及使用它们可以做的所有有趣的事情,请查看手册man update-alternatives

总结不,它们不应该发生冲突。确保任何依赖于 Java 6 或 Java 7 的东西都在使用实际的二进制文件(而不是符号链接),因为/usr/bin/java根据系统替代方案的不同,运行可能会产生不同的结果。

相关内容