从Java应用程序中动态加载和运行Java代码

从Java应用程序中动态加载和运行Java代码,java,Java,我正在考虑编写一个Java应用程序,其中用户可以用Java编写一些模块,并将它们添加到该应用程序中的库中。模块将是一些使用主应用程序数据的计算。可能有点像办公室里的VBA。 如果有人能给我一些从哪里开始的提示,我将不胜感激,因为我在网上找不到有用的东西。 提前谢谢 如果愿意,您可以尝试从头开始开发模块框架。 然而,如果你正在开发任何严肃的东西,你应该考虑使用OSGi。 理论上是可能的。您可以允许用户编写java类,然后可以使用java编译器编译该类,生成.class文件。您可以使用自定义类加载器

我正在考虑编写一个Java应用程序,其中用户可以用Java编写一些模块,并将它们添加到该应用程序中的库中。模块将是一些使用主应用程序数据的计算。可能有点像办公室里的VBA。
如果有人能给我一些从哪里开始的提示,我将不胜感激,因为我在网上找不到有用的东西。

提前谢谢

如果愿意,您可以尝试从头开始开发模块框架。
然而,如果你正在开发任何严肃的东西,你应该考虑使用OSGi。

理论上是可能的。您可以允许用户编写java类,然后可以使用java编译器编译该类,生成

.class
文件。您可以使用自定义类加载器(可能是
URLClassLoader
或其子类等)加载它们

但是 这是一个非常严肃的应用程序。实际上,它是一种IDE。所以,你真的想看看创建基于Eclipse的应用程序的可能性,也就是说,实现几个Eclipse插件


另一种方法可能是允许用户使用一种流行的脚本语言编写代码。例如,groovy具有类似java的语法,但无需编译即可运行,并且不需要创建类等。Javascript也是一种选项。Javascript解释器是JDK的一部分,因此您甚至不需要外部依赖项。

您可能是最好合并某种形式的jvm脚本语言。比如groovy、jruby或jython。它们不需要实际编译,可以作为源代码存储在您的系统中。此外,它们也可以很好地编写代码。groovy具有作为java超集的优势。(大部分情况下)您可以降级为java代码,并在groovy解释器中运行它。

您到底想要什么?模块的动态加载?代码的动态编译?我想两者都可以。用户可以编写一些java代码,编译并从主应用程序中运行。源代码和类保存在库中,以便用户可以随时运行/更改它。模块应该能够处理来自主应用程序的数据,主应用程序应该能够处理来自模块的结果。应该可以帮助您进行编译。您需要编写自己的类加载器来加载字节码和热交换。这当然是可能的,但Java似乎不是一个好的f这是针对这个用例的。你考虑过使用吗?@biziclop谢谢,脚本API看起来很棒!你为什么不认为Java很适合?你推荐哪种语言?我正在使用Linux。嗨,哈坎,谢谢你的建议。但是我觉得这对我来说有点太重了:-)我不知道你的背景,尽管如此,我还是建议您查看此链接,查看一些关于OSGi的流行误解(例如OSGi是重量级的误解):谢谢,听起来不错。我不知道groovy,javascript解释器是JDK的一部分。这可能是可能的。谢谢,我刚刚尝试使用Java脚本引擎和Jython。看起来很有希望!正是我需要的。谢谢