luaJ是一个java实现的lua脚本解释器,适合嵌入java应用中。个人比较喜欢libgdx这个引擎,所以对luaJ项目也有一些关注。cocos2d貌似也用到了这个。对于一些不想使用本地库的java项目,luaJ是个不错的选择。我下载的是luaJ-3.0.1版本,解压后可以得到完整的工程目录。主要用到的东西是lib文件夹中的luaj-jse-3.0.1.jar这个包,(另一个是luaJ-jme-3.0.1.jar)。版本不同可能有出入,使用带有jse的包就可以了。
1、执行lua脚本
新建一个lua文件hello.lua,写入以下内容:
print('hello')
方便起见,将hello.lua文件新建在lib文件夹中,跟luaJ-jse-3.0.1.jar在同一个目录即可,然后打开命令行,cd到这个文件夹,输入命令:
java -cp luaj-jse-3.0.1.jar lua hello.lua
即可看到输出结果:hello
上面的luaj-jse-3.0.1.jar以及hello.lua部分可以替换成其他的目录。
2、编译lua脚本为lua字节码
上面的方法使用lua命令解释模式执行lua代码,这种方法比较慢;我们可以使用luac命令来编译lua代码成为lua字节码,还是以hello.lua为例,进入lib目录下,输入:
java -cp luaj-jse-3.0.1.jar luac hello.lua
执行完毕后,当前文件夹下多出了luac.out文件,这个文件就是hello.lua编译后的lua字节码。
那么如何指定输出路径呢?可以使用命令
java -cp luaj-jse-3.0.1.jar luac hello.lua -o hello.luac
加上 -o [路径]来指定输出文件的位置。上面的命令执行后会在当前文件lib下面生成hello.luac文件。
接下来执行lua字节码。以hello.luac为例,命令如下:
java -cp luaj-jse-3.0.1.jar lua hello.luac
如果没有指定输出:
java -cp luaj-jse-3.0.1.jar lua luac.out
3、lua脚本编译成java字节码
这个功能很强大,不过可能用的人不多...这个命令是luajc;使用这个命令需要安装ant,以及bcel-5.2.jar这个包。后者可以百度英文搜索bcel-5.2来下载。下载完成后把bcel-5.2.jar放到lib目录下。方便起见同样切换到lib目录下执行。
命令如下:
java -cp luaj-jse-3.0.1.jar;bcel-5.2.jar luajc -s . -d . hello.lua
特别注意那两个点,代表当前目录:-s后面是源代码目录所在,-d后是输出的class文件目录所在,最后是文件名。
执行后在lib目录下生成了hello.class
接下来执行hello.class文件,同样在lib目录下执行
java -cp luaj-jse-3.0.1.jar;. lua -l hello
运行后输出hello