0

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

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

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

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

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

4

2 回答 2

2

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

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

编译:

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

执行:

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

它会起作用,但要注意它的安全隐患。您基本上使用户能够在您自己的服务器上执行不受信任的代码。只需确保以非特权用户身份执行代码,对任何内容都没有读/写访问权限,并且根本没有网络访问权限!还可以酌情限制 cpu 份额和超时执行。

于 2016-10-04T15:23:26.127 回答
0

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

于 2016-10-05T10:51:16.297 回答