如何让hustoj支持Java判题
问题描述
在hustoj中输入Java代码后,报错:
答案错误 AC:0%
查看错误信息:
Execution error, USE_DOCKER:1 !
> You need to install compiler VM or runtime for your language.
需要安装JDK编译器。
解决方案
1. 修改Dockerfile安装Java环境
新安装的系统需要 重启才能判java,jdk是安装在docker容器中的,外部安装jdk不会起作用。先重启试试,不行,再进行下一步。
修改jdk的版本,以root身份到/home/judge/src/install
目录下修改Dockfile文件(内有注释),然后运行bash docker.sh
。
编辑文件:sudo vim /home/judge/src/install/Dockerfile
添加以下内容:
RUN DEBIAN_FRONTEND=noninteractive apt-get -y install --no-install-recommends default-jdk
RUN DEBIAN_FRONTEND=noninteractive apt-get -y install --no-install-recommends openjdk-11-jdk-headless
RUN DEBIAN_FRONTEND=noninteractive apt-get -y install --no-install-recommends openjdk-17-jdk-headless
RUN DEBIAN_FRONTEND=noninteractive apt-get -y install --no-install-recommends ecj
执行命令:
cd /home/judge/src/install && bash docker.sh
然后重启服务器。
2. 解决编译错误问题
再次在hustoj中输入Java代码后:
- 显示:编译中 0%
- 显示:编译错误
查看编译信息:
Main.java:9: 错误: 非法的类型开始
import java.io.*;
^
Main.java:9: 错误: 需要<标识符>
import java.io.*;
^
Main.java:10: 错误: 非法的类型开始
import java.util.*;
^
Main.java:10: 错误: 需要<标识符>
import java.util.*;
^
4 个错误
3. 进一步解决方案
- JDK版本问题:目前只支持sun原版jdk和openjdk,其他jdk暂不能保证支持。
- Ubuntu系统安装源问题:
- 执行
sudo apt-get install openjdk-7-jdk
- 报错:
E: Package ‘openjdk-7-jdk’ has no installation candidate
,是因为Ubuntu16.04的安装源已经默认没有openjdk7了。推荐使用ubutnu STL 20.04 或者24.04 - 可以选择安装其他版本:
sudo apt install default-jdk # version 2:1.11-72build2 sudo apt install openjdk-11-jdk-headless # version 11.0.15+10-0ubuntu0.22.04.1 sudo apt install openjdk-17-jdk-headless # version 17.0.3+7-0ubuntu0.22.04.1 sudo apt install ecj # version 3.16.0-1
- 执行
注意事项
- Java使用OpenJDK 11.0.9.1编译,命令为
javac -J-Xms32m -J-Xmx256m Main.java
- 如果您的代码中没有
public class
,请将入口类命名为Main
如果问题仍未解决, 可以点击下方名片协助。