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

时间:2016-10-04 15:14:15

标签: node.js java-compiler-api javacompiler

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

我在下面用exec方法遇到了解决方案,

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

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

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

2 个答案:

答案 0 :(得分:2)

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

你可以做的是使用javac将源代码编译成可执行类,然后用java执行它。

编译:

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

执行:

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

它会起作用,但要小心它的安全含义。您基本上允许用户在您自己的服务器上执行不受信任的代码。只需确保以非特权用户身份执行代码,对任何事物都没有读/写权限,根本就没有网络访问权限!同时限制cpu份额并在适当时超时执行。

答案 1 :(得分:0)

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