2016-10-04 88 views
0

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

我曾经碰到过下面exec方法解决方案,

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

但由于涉及在编译之前创建的jar文件出来的用户提交的Java代码,这种解决方案听起来并不可行。

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

回答

0

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

2

鉴于用户将提交其源代码作为一个单独的文件:

你可以做的就是编译源到使用javac可执行类,然后只需用java执行它。

编译:

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

执行:

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

它会工作,但是那的安全隐患提防。您基本上可以让用户在您自己的服务器上执行不受信任的代码。只要确保以非特权用户的身份执行代码,对任何内容都不具有读/写权限,并且完全不允许网络访问!还要限制cpu共享并根据需要超时执行。

+0

如何将用户输入传递给代码来运行和测试? –