2016-10-04 89 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

如何將用戶輸入傳遞給代碼來運行和測試? –