在线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 等。它还支持来自用户的输入。
我正在使用 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 等。它还支持来自用户的输入。