我正在使用 MEAN 堆栈进行在线编码测试应用程序。在nodejs中寻找解决方案,编译用户在编辑器中输入并提交的Java代码。用户可以输入测试输入,运行并检查输出。
我使用 exec 方法遇到了以下解决方案,
exec('java -jar userCode.jar',function (error, stdout, stderr){
});
但是这个解决方案听起来并不可行,因为它涉及在编译之前从用户提交的 java 代码中创建 jar 文件。
这个问题有更好的解决方案吗?
我正在使用 MEAN 堆栈进行在线编码测试应用程序。在nodejs中寻找解决方案,编译用户在编辑器中输入并提交的Java代码。用户可以输入测试输入,运行并检查输出。
我使用 exec 方法遇到了以下解决方案,
exec('java -jar userCode.jar',function (error, stdout, stderr){
});
但是这个解决方案听起来并不可行,因为它涉及在编译之前从用户提交的 java 代码中创建 jar 文件。
这个问题有更好的解决方案吗?
鉴于用户将他的源代码作为单个文件提交:
您可以做的是使用 javac 将源代码编译成可执行类,然后简单地使用 java 执行它。
编译:
javac -cp /path/to/libs/jar/files MyProgram.java
执行:
java -cp .;/path/to/libs/jar/files MyProgram
它会起作用,但要注意它的安全隐患。您基本上使用户能够在您自己的服务器上执行不受信任的代码。只需确保以非特权用户身份执行代码,对任何内容都没有读/写访问权限,并且根本没有网络访问权限!还可以酌情限制 cpu 份额和超时执行。
我找到了 nodeJS 库compilex的解决方案,它允许编译多种语言,如 Java、C、C++、C#、Python 等。它还支持来自用户的输入。