# 添加新的编程语言

  1. 编写测试代码文件,选择合适的 Docker 镜像,定制 Dockerfile ,而后进行构建,其中至少包含以下内容:

    为什么需要测试代码?参阅安全性是如何保证的? #3

    FROM xx:version # 基础镜像
    
    # 以下三步是必须的
    WORKDIR /code
    COPY test.xx .
    RUN mkdir 语言名称 # 如py/java/c
    
    CMD ["bash"]
    
  2. 在构建配置文件时,进行如下修改:

    Config config = new Config(ModeEnum.CLASSIC)
      .addLang(languageName,languageFileName,imageName,testCommand,testResult)
    	...
    

    其中:

    名称 含义
    languageName 第一步中的语言名称,为 runCode方法中需要提供的第一个参数
    languageFileName 创建的代码文件名称,对于 Java 语言需要特殊注意主类名问题
    imageName 第一步中构建的镜像名称
    testCommand 测试命令
    testResult 测试正确执行的预期结果

# 示例:DJudger 默认的 C++ 配置

https://github.com/NicerWang/DJudger/tree/master/containers/c

  1. 文件准备:

    • Dockerfile

      FROM gcc:9.4
      
      WORKDIR /code
      COPY test.cpp .
      RUN mkdir c # 文件夹名称必须和 languageName 一致
      
      CMD ["bash"]
      
    • 测试代码

      #include<iostream>
      using namespace std;
      int main(){
      	cout<<"Pass"<<endl;
      }
      
  2. 构建镜像:

    cd containers/c
    sudo docker build -t judger_c .
    
  3. 在构建配置对象时引入:

    Config config = new Config(ModeEnum.CLASSIC)
      .addLang("c","main.cpp","judger_c","g++ test.cpp&&./a.out","Pass")
    	...
    
上次更新: 2022年9月26日星期一下午4点45分 GMT+8