Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
编译运行时引用当前程序类的java代码_Java_Plugins_Compiler Construction_Compilation_Interpreted Language - Fatal编程技术网

编译运行时引用当前程序类的java代码

编译运行时引用当前程序类的java代码,java,plugins,compiler-construction,compilation,interpreted-language,Java,Plugins,Compiler Construction,Compilation,Interpreted Language,我正试图编写一个程序,允许用户创建“插件”。就像LinuxBashShell可以通过将文件放入目录来添加命令一样,我尝试允许用户将代码放入目录,并让我的程序执行它 我想到了几种方法: 设法创建我自己的脚本语言,并让用户使用它来编写插件 查找Java支持的现有脚本语言,并将其用于用户编写插件 让用户用Java编写插件,并在我的程序运行时编译它们 虽然这三个选项看起来都很糟糕,但这是我所能想到的,选项3似乎是三个选项中最好的。所以,我做了一些研究,发现Java1.6以后支持文件的运行时编译。但是,如

我正试图编写一个程序,允许用户创建“插件”。就像LinuxBashShell可以通过将文件放入目录来添加命令一样,我尝试允许用户将代码放入目录,并让我的程序执行它

我想到了几种方法:

  • 设法创建我自己的脚本语言,并让用户使用它来编写插件
  • 查找Java支持的现有脚本语言,并将其用于用户编写插件
  • 让用户用Java编写插件,并在我的程序运行时编译它们
  • 虽然这三个选项看起来都很糟糕,但这是我所能想到的,选项3似乎是三个选项中最好的。所以,我做了一些研究,发现Java1.6以后支持文件的运行时编译。但是,如果用户编写的代码引用了我在基程序中拥有的某些特定类,我不确定编译器是否会失败。通常会,但由于我的程序正在编译它,我不知道编译器是否允许他们使用基程序中的类

    我希望这对用户来说尽可能简单。我的主要问题是编译器在引用我的基程序中的类时是否会有问题。我不想在我的所有类中都包含一个.jar,让用户在开发时将其用作库。正如我所说的,我希望这对用户来说很容易,理想情况下,它应该尽可能接近解释语言。这就是为什么我希望在程序运行时这样做,这样用户就不必费心编译了。他们只需要将.java文件放在一个目录中,然后运行我的程序

    如果有人知道编译器是否会对类产生问题,或者他们知道更好的方法,那就太好了


    谢谢

    最常见的Java应用程序插件都是用Java编写的。插件是一项棘手的业务,因为它们暴露了许多潜在的不好的东西

    如果您想将脚本语言编译成Java,那么可以。你必须:

  • 创建Java类
  • 建立一套脚本可以做什么和不能做什么的规则
  • 调用编译器,并引用要向该Java类公开的API Jar(以便编译器可以遵循引用链)
  • 只将Java类而不是API jar加载到当前类加载器的子类加载器中 如果使用当前加载的相同API jar编译target*.java,那么类引用应该不会有问题。不要在子类加载器中加载API JAR,因为会发生类类型错误

    看看LuaJava的脚本引擎