在我正在开发的 Web 应用程序中,用户将能够上传 Java 代码,我需要编译并运行该代码。出于安全原因,我希望将其放在 LXC 容器内,并且出于占用空间的原因,我希望将其设置为 busybox。因此,我成功创建了一个 busybox 容器:
lxc-create -n my-box -t busybox
它启动并运行良好。然后,我从下载了 jdk-8u31-linux-i586.rpm这里和 ran rpm -i jdk-8u31-linux-i586.rpm
,它没有返回任何输出,但创建了/usr/java/jdk1.8.0_31
一切看起来都不错的结果。
但是,当我去/usr/java/jdk1.8.0_31/bin
运行时./javac -version
,我得到:
/usr/java/jdk1.8.0_31/bin # ./javac -version
Error occurred during initialization of VM
java/lang/NoClassDefFoundError: java/lang/Object
我认为这可能是因为类路径或 java_home 设置不正确,所以,我创建了一个/etc/profile
:
JAVA_HOME=/usr/java/jdk1.8.0_31
CLASSPATH=/usr/java/jdk1.8.0_31/lib
PATH=$PATH:$JAVA_HOME/bin
export JAVA_HOME
export CLASSPATH
export PATH
这工作得很好,当我回显变量时,它们具有我设置的值。然而,问题仍然javac
存在。java
具有完全相同的输出。
我在这里错过了什么?
主机系统是Ubuntu Server 14.04。我也尝试过 x64 版本,结果相同。
答案1
事实证明,问题是一样的这里:我仍然需要从 java 安装中的 lib 和 jre/lib 文件夹中解压 *.pack 文件。unpack200
,用于将 *.pack 文件解压为 .jar 文件的程序在 busybox 中不可用,但它是随 java 一起提供的。