我是否可以在64位版本之外安装32位Java?

对于正常开发,我使用64位VM,当我使用包管理器安装Java开发工具包(OpenJDK)时。

但是有一些Java应用程序(我想包含本机库)在64位Java VM上不起作用。 (看起来SoapUI是这样的候选者 – 在版本4.0.1和4.5 beta 1中,如果在64位VM中运行,它会因分段错误而失败。)

除了64位之外,我试图安装i386版本的openjdk-6-jre,但这被aptitude拒绝(说它与现有的64位版本冲突)。 如果我尝试在32位版本中安装openjdk-jre-7,也会发生同样的情况。

答案我可以在建议安装ia32-sun-java6-bin 的64位系统上运行Java 32位应用程序 ,但是没有包含此名称的包(或任何带有ia32和Java的包)。

我怎么能在没有将整个系统Java安装切换到32位的情况下运行SoapUI?

安装多个版本的Java非常容易。 有点困难(阅读:单调乏味)是随心所欲地在版本之间切换。

tldr

  1. apt-get one
  2. 解开另一个
  3. 导出路径取决于您想要的路径

apt-get一个版本

确定您最常使用的版本。 或者决定您想要自动更新哪一个。 无论如何,或者翻转一枚硬币。 你甚至不必使用apt-get ; 只需手动维护系统上的两个软件包(参见下一个标题)。

关键是:使用Ubuntu的包管理器更容易维护像java这样的软件包的一个版本。 你会照顾其余的。

解开另一个

下载jdk tarball。 将其解压缩到/opt

在它们之间切换

我让包管理器处理我的主要安装。 当我需要时,我为另一个输出一些变量。 我在命令行上工作很多,所以对我来说这是一个很好的解决方案。 我打扰:

 export JAVA_HOME=/opt/jdk export PATH=$JAVA_HOME/bin:$PATH 

另外,我symlink jdk/ – > jdk1.6.0_3/因为我很懒,不喜欢每次增量jdk升级时重新配置我的.bashrc和其他脚本。

您可能关心的环境变量:

 JAVA_LIBDIR JNI_LIBDIR JAVAJNI_LIBDIR JVM_ROOT JAVA_HOME PATH 

安装

首先,从Sun 下载最新的32位JDK(而不是JRE)。 当时这对我来说是jdk-6u7-linux-i586.bin。

安装java-package:

 sudo apt-get install java-package 

现在使用java-package从你下载的二进制文件中构建一个.deb包。 你必须欺骗它来构建32位包:

 DEB_BUILD_GNU_TYPE=i486-linux-gnu DEB_BUILD_ARCH=i386 fakeroot make-jpkg jdk-6u7-linux-i586.bin 

这应该生成一个.deb包。 由于某种原因,包名称具有_amd64后缀。 安装包:

 sudo dpkg -i sun-j2sdk1.6_1.6.0+update7_amd64.deb 

使用update-alternatives选择新的JDK。 它安装在/usr/lib/j2sdk1.6-sun对我来说。

 sudo update-alternatives --config java 

如果你运行java -version你应该看到正确的版本:

 java version "1.6.0_07" Java(TM) SE Runtime Environment (build 1.6.0_07-b06) Java HotSpot(TM) Server VM (build 10.0-b23, mixed mode) 

32位Eclipse

我不得不重新安装32位版本的Eclipse(因为SWT包含本机代码)。 我还必须删除我的〜/ .eclipse目录,否则Eclipse将无法启动(这需要重新安装任何插件的新版本)。 最后,使用安装位置(/usr/lib/j2sdk1.6-sun)在Java-> Installed JRE中添加新的JRE,并将其选为默认值。

REF

或者你只能安装ia32-libs

  apt-get install ia32-libs 

解压缩x86 jre

http://javadl.sun.com/webapps/download/AutoDL?BundleId=63983

并根据需要添加到PATH。