在服务器上设置Java编译器?

时间:2011-03-09 04:29:52

标签: java compiler-construction

有没有办法在服务器上设置Java编译器来编译上传的脚本?我的用例是用户可以上传程序的自定义Java脚本/插件。然后服务器将编译这些脚本,并将.jar放在一个文件夹中。然后,应用程序(用户正在开发的应用程序)将查询服务器以下载和使用可用的脚本/插件。这可能吗?如果是这样,怎么样?

*编辑: 我无法在我的服务器上安装JDK,因为它是一个共享服务器。有没有办法编译java而不安装任何东西(我知道这是一个愚蠢的问题,但问一下是不是有害...)?我有PHP ....不是那会有所帮助。

3 个答案:

答案 0 :(得分:3)

我在这里回答了类似的问题:

Dynamic code execution

简而言之,Java Compiler API允许您从Java Strings创建包含源代码的已编译Java类文件。

答案 1 :(得分:1)

这绝对有可能。您基本上只需要服务器将上传的代码保存到磁盘,然后使用Runtime#exec()在文件上调用javac。但是,如果您的服务器要在其类路径中动态添加新类,则可能需要自定义Classloader

N.B。允许用户在您的服务器上执行任意Java会打开一个巨大的安全漏洞。

自定义类加载器推荐阅读:

答案 2 :(得分:0)

编辑:很抱歉,如果这不是您想要的。我以为你在考虑持续整合。

通常这是使用源代码控制和构建系统完成的,它被称为“持续集成”。我个人正在使用Hg(mercurial)+ Maven + Continuum。

所以当我向mercurial提交新脚本时会发生什么,continuum会选择这个并让maven检查更改,并构建(编译)项目。通常一些单元测试甚至集成测试/性能测试等也在此时运行。

可以通过Continuum的Web界面(GUI)检索生成的二进制文件。

Here is how it looks like

对于下载和使用,许多人将生成的工件(jar)“部署”到maven存储库,其他应用程序可以从中下载jar并使用它。部署也可以使用maven自动完成。