Java:嵌入到 Java 桌面应用程序中的脚本语言(宏)

Posted

技术标签:

【中文标题】Java:嵌入到 Java 桌面应用程序中的脚本语言(宏)【英文标题】:Java: Scripting language (macro) to embed into a Java desktop application 【发布时间】:2010-09-13 16:34:47 【问题描述】:

我正在用 Java 编写一个图形应用程序。最终我想建立一种脚本语言,这样事情就可以编程了。你推荐哪个语言库?

可能的嫌疑人是:

Rhino (javascript) JRuby(红宝石) Jython (Python)

不太可能的候选人是:

使用JavaCC 打造我自己的语言 LuaJava (Lua) Groovy JavaFX Script-Fu

目标受众可能不是铁杆程序员,因此首选不那么晦涩难懂的语言。我的猜测是 JavaScript 更容易被他们接受,即使它有怪癖,只是因为他们看到的更多。

Lua 在 C/C++ 中似乎很流行,但至少 LuaJava 需要额外的 .dll/.so,这使得部署变得复杂。

编辑: PhiLho 写道,有一个名为 kahlua 的 Lua 的 Java 实现。


相关问题:

Which scripting language to support in an existing codebase?(在 C/C++ 中) Adding Scripting functionality to .net Apps What is the best scripting language to embed in a C# desktop application.

【问题讨论】:

【参考方案1】:

如果目标受众是“没有编程技能....”,请选择 jython (python),它很容易学习。 (我 7 岁的女儿很快就学会了)

Bruce Eckel 在“thinking in java”中与 jython 合写了一章。

在获得“否决”python 的危险中比 BASIC 更容易 :-)

【讨论】:

【参考方案2】:

Lua 因其语言简单、易于学习而受到赞赏。 LuaJava 使用原始的 Lua 实现,使其完整,但正如您指出的那样,安装起来可能很微妙。我至少知道 Lua 的纯 Java 实现:Kahlua。它不完整(除其他外缺少协程支持,但没有它们可以做很多事情)但可能已经可以用于您的目标。 与 Groovy 不同,它不会给您的应用程序增加太多开销...

【讨论】:

【参考方案3】:

如果您想全力以赴,您可以使用 JSR 223 的 defined 为 Java 平台编写脚本。采用这种方法将允许应用程序使用任何符合 script engine 的语言。

【讨论】:

“然而,用于 JavaScript 编程语言的 Mozilla Rhino 引擎目前作为一项功能包含在 JDK 6 和 JRE 6 库中。”这会让 Rhino 稍微领先于其他所有人吗? 理论上确实如此。我还不确定这就是现实中发生的事情。【参考方案4】:

还有 BeanShell,它的优势是成为完全认可的 JSR,因此可能更容易留下来。

http://www.beanshell.org/

【讨论】:

另外:它基本上是动态的 Java,所以很容易将它附加到 Java 程序中。缺点:它基本上是动态 Java,因此它可能不是最容易学习的语言。 如果我喜欢Java,并且我使用Java,但我不想让我的用户知道他们正在运行Java应用程序,那是不是有点像为丑陋的女朋友感到羞耻?不,对吧?【参考方案5】:

Java 6 已经将 javascript 作为 JSR 223 脚本语言提供,开箱即用。

【讨论】:

它随 Rhino 一起提供,我也评论了 laz 的答案。理论上,这是官方的背书。【参考方案6】:

我刚刚阅读了 Steve Yegge 的 The Universal Design Pattern。这篇文章的主题比 Java 应用程序中的嵌入式脚本要广泛得多,但是由于作者编写了一个允许编写脚本的 Java 应用程序(使用 Jython),因此我发现了一些有趣的观点。

而 JavaScript 是两个最好的之一 地球上的脚本语言,在 该术语的最正确含义 “脚本语言”:即, 设计的语言 专门嵌入更大的 主机系统,然后用于 在 主机系统。这就是 JavaScript 被设计来做。这是合理的 小,带有一些可选的扩展, 它有一个相当紧凑的非正式 规范,它有一个仔细 精心制作的表面处理界面 主机系统对象透明地 JavaScript。

相比之下,Perl、Python 和 Ruby 巨大的蔓延,都在尝试(比如 C++ 和 Java)成为最好的语言 每一项任务。唯一的其他主流 与之竞争的语言 用于任意编写脚本的 JavaScript 主机系统是 Lua,以 选择的脚本语言 游戏行业。

我同意他将范围缩小到 JavaScript 和 Lua。

没有手边的例子,我只能 是说使用 JavaScript/Rhino (或 Lua,一旦它在 JVM) 可能已经成就了我的生活 更容易。

我个人更喜欢 Java 平台上的 JavaScript。用户基数更大。 正如 Yegge 所说,它是“世界上最容易被误解的编程语言”,但该语言的可用资源量是一个加分项。 Rhino 似乎是一只成熟的野兽。

【讨论】:

【参考方案7】:

我目前正在寻找一个允许我使用 Lua 脚本中的 Java 对象和方法的库。

我的第一个想法是也使用 LuaJava,但由于我希望它能够在 Linux、Mac 和 Windows 上运行,我被它除了使用 Java 东西之外还使用编译库这一事实所推迟。只有 Windows 预编译的二进制文件可用,而且我不是 Mac 专家,所以我试图在纯 Java 中找到一些东西,结果发现:http://sourceforge.net/projects/luaj

似乎实现了 Lua 文档中描述的 C API,以及来自 LuaJava 的 API。

该项目看起来非常先进,有来自 Lua (!) 的 Swing 调用示例,它们在我的 Linux 机器上运行。但奇怪的是,邮件列表、论坛和文档真的很少。

我也打算在 Windows 和 Mac 上试试这个。希望它有效。

已经提到了 Kahlua,但它只针对 J2ME,这就是为什么它缺少 Lua 的某些部分。我认为有一个名为 Mochalua 的项目具有相同的目标。

另一方面,LuaJ 有两个版本,一个针对实现所有东西(协程)的 J2SE,一个针对 J2ME,我认为它缺少 2 或 3 个库(包括 LuaJava 的东西,它需要反射)。

【讨论】:

【参考方案8】:

您可以考虑Jacl。它基于最初设计为可嵌入脚本语言的 Tcl。因此,有人可能会争辩说,它比其他能够嵌入附加的脚本语言更适合该目的。

特别是如果目标受众是“非核心程序员”,Jacl 是一个不错的选择。聪明的人(尤其是那些没有硬性编程偏见的人)可以在早上轻松掌握 Tcl 语法。

【讨论】:

【参考方案9】:

您可以使用RelProxy - Java,它提供了真正的纯Java 作为脚本语言,包括用Java 制作的shell 脚本,这要归功于它的即时编译。因为 Java“脚本”是共享启动器 ClassLoader 执行的,所以集成很简单。

【讨论】:

以上是关于Java:嵌入到 Java 桌面应用程序中的脚本语言(宏)的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Windows 环境中写入安装在“C:\Program Files”中的 Java 桌面应用程序的嵌入式 derby 数据库?

可嵌入的简单轻量级脚本语言,直接绑定到 Android 的 java

在 Java 桌面应用程序中嵌入谷歌地图

在基于 Java 的桌面应用程序中嵌入浏览器 [重复]

java - 如何在java桌面应用程序中使用spring(事务)和hibernate创建嵌入式H2 DB?

在java中运行pig而不嵌入pig脚本