在线java编码测试:在nodejs中编译提交的java代码

Online java coding test: compile submitted java code in nodejs

我正在使用 MEAN 堆栈进行在线编码测试应用程序。在 nodejs 中寻找解决方案,以编译用户在编辑器中输入并提交的 Java 代码。用户可以输入测试输入 运行 并检查输出。

我遇到过以下使用 exec 方法的解决方案,

exec('java -jar userCode.jar',function (error, stdout, stderr){
});

但是这个解决方案听起来不可行,因为它涉及在编译之前根据用户提交的 java 代码创建 jar 文件。

这个问题有更好的解决方案吗?

假设用户将他的源代码作为单个文件提交:

您可以使用 javac 将源代码编译成可执行文件 class,然后使用 java.

简单地执行它

正在编译:

javac -cp /path/to/libs/jar/files MyProgram.java

正在执行:

java -cp .;/path/to/libs/jar/files  MyProgram

它会起作用,但要注意它的安全隐患。您基本上允许用户在您自己的服务器上执行不受信任的代码。请确保以非特权用户身份执行代码,不能 read/write 访问任何内容,也根本不能访问网络!还限制 cpu 份额并视情况暂停执行。

我找到了 nodeJS 库 compilex 的解决方案,它允许编译多种语言,如 Java、C、C++、C#、Python 等。它还支持来自用户的输入。