Java调用Lua脚本(LuaJava使用、安装及Linux安装编译)
依赖包(附件有下载):
包名 | 类型 | 操作系统 |
luajava-1.1.jar | jar | ALL |
libluajava-1.1.so | .so | linux |
luajava-1.1.dll | .dll | windows |
windows:
将luajava-1.1.dll拷贝到java.libary.path目录(通过System.getProperty("java.library.path")可以知道)
linux:
将libluajava-1.1.so拷贝到java.libary.path目录(通过System.getProperty("java.library.path")可以知道)
如果linux有问题,则按以下操作重新编译.so文件
1.编译&安装Lua
tar -zxvf lua-5.1.5.tar.gz
cd lua-5.1.5
make linux install
注:64位系统需要先编辑src/Makefile,在CFLAGS上添加-fPIC。
2.编译与安装Luajava
tar -zxvf luajava-1.1.tar.gz
cd luajava-1.1
修改 config文件,添加JAVA_HOME=/broadtech/javaweb/jdk1.6.0_25
make
3.部署。
将编译好的libluajava-1.1.so拷贝到java.libary.path目录(通过System.getProperty("java.library.path")可以知道),
luajava-1.1.jar拷贝到$JAVA_HOME\jre\lib\ext目录
4、重启项目
注:LuaJava1.1缺少了JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState__1pushInteger (JNIEnv * env , jobject jobj , jobject cptr , jint number) 方法的实现,编译前可编辑src/c/luajava.c加入以下代码实现再make
- /************************************************************************
- * JNI Called function
- * Lua Exported Function
- ************************************************************************/
- JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState__1pushInteger
- (JNIEnv * env , jobject jobj , jobject cptr , jint number)
- {
- lua_State * L = getStateFromCPtr( env , cptr );
- lua_pushinteger( L, ( lua_Integer ) number );
- }
LuaUtil.java
- /**
- * 调用Lua脚本
- * @author chamcon
- * @date 2013-11-07 15:58:48
- */
- public class LuaUtil {
- public static List<String> PUBLIC_LUA_FILES = new ArrayList<String>();
- public static Logger logger = Logger.getLogger(LuaUtil.class);
- static {
- //配置公共函数lua文件
- //PUBLIC_LUA_FILES.add("");
- }
- /**
- * 执行Lua脚本
- */
- public static String execLuaFunc(String lua,String funcName,String value){
- //依赖库文件要放到java.library.path下
- logger.debug("java.library.path:"+System.getProperty("java.library.path"));
- LuaState L = LuaStateFactory.newLuaState();
- // 加载lua标准库,否则一些lua基本函数无法使用
- L.openLibs();
- //加载公共函数文件
- if(!PUBLIC_LUA_FILES.isEmpty()){
- for(int i=0;i<PUBLIC_LUA_FILES.size();i++){
- L.LdoFile(PUBLIC_LUA_FILES.get(i));
- }
- }
- //加载函数串
- L.LdoString(lua);
- //调用函数名
- L.getField(LuaState.LUA_GLOBALSINDEX, funcName);
- //设置参数
- L.pushString(value);
- //调用
- L.call(1, 1);
- //设置返回对象
- L.setField(LuaState.LUA_GLOBALSINDEX, "RESULT");
- LuaObject lobj = L.getLuaObject("RESULT");
- //获取返回值
- String res = lobj.getString();
- L.close();
- if(res == null) return "";
- return res;
- }
- }
Java调用Lua脚本(LuaJava使用、安装及Linux安装编译)的更多相关文章
- Java调用Lua脚本(热载实现)
前言: Lua作为解析执行的脚本语言, 往往是易变逻辑编写的首选语言, 尤其是在游戏领域. C/C++和Lua的结合, 往往了标配. 比如Redis, Nginx其对Lua的支持, 也是杠杠的. 当然 ...
- Redis进阶实践之八Lua的Cjson在Linux下安装、使用和用C#调用Lua脚本
一.引言 学习Redis也有一段时间了,感触还是颇多的,但是自己很清楚,路还很长,还要继续.上一篇文章简要的介绍了如何在Linux环境下安装Lua,并介绍了在Linux环境下如何编写L ...
- lua调用java java调用lua[转载]
转载:http://dualface.github.io/blog/2013/01/01/call-java-from-lua/LuaJavaBridge - Lua 与 Java 互操作的简单解决方 ...
- Java调用Lua(转)
Java 调用 Lua app发版成本高,覆盖速度慢,覆盖率页低.一些策略上的东西如果能够从服务端控制会方便一些.所以考虑使用Lua这种嵌入式语言作为策略实现,Java则是宿主语言. 总体上看是一个模 ...
- java调用python脚本并向python脚本传递参数
1.安装Eclipse 先安装jdk,再安装Eclipse,成功后开始建立py_java项目,在这个项目的存储目录SRC下建立test包,在test包中New-Class,新建MyDemo类,建好完成 ...
- 用C#调用Lua脚本
用C#调用Lua脚本 一.引言 学习Redis也有一段时间了,感触还是颇多的,但是自己很清楚,路还很长,还要继续.上一篇文章简要的介绍了如何在Linux环境下安装Lua,并介绍了在Linux环境下如何 ...
- 通过Java调用Python脚本
在进行开发的过程中,偶尔会遇到需要使用Java调用Python脚本的时候,毕竟Python在诸如爬虫,以及科学计算等方面具有天然的优势.最近在工作中遇到需要在Java程序中调用已经写好的Python程 ...
- Java 调用 shell 脚本详解
这一年的项目中,有大量的场景需要Java 进程调用 Linux的bash shell 脚本实现相关功能. 从之前的项目中拷贝的相关模块和网上的例子来看,有个别的“陷阱”造成调用shell 脚本在某些特 ...
- (转)java调用python脚本
这篇博客旨在吐血分享今天遇到的java调用python脚本遇到的坑,折腾了3个多小时终于可以跑通了,代码超级短,但网上的好多资料都是抄来抄去的,很少有能够直接跑通的,尤其是针对你的python文件中用 ...
随机推荐
- thinkphp框架开启页面gzip压缩
Thinkphp下开启gzip压缩很简单,不管你是哪个版本,只要在你的入口文件index.PHP中加入以下两行,如果你的服务器支持,那么就OK了. define ( "GZIP_ENABLE ...
- Python即时网络爬虫项目: 内容提取器的定义
1. 项目背景 在python 即时网络爬虫项目启动说明中我们讨论一个数字:程序员浪费在调测内容提取规则上的时间,从而我们发起了这个项目,把程序员从繁琐的调测规则中解放出来,投入到更高端的数据处理工作 ...
- class之cls
cls代表的是类本身,一般在静态方法中使用
- 安装apk到虚拟的device
adb device 显示你的设备 adb install apk包
- 转——iptables详细配置
基本原理及命令使用 http://my.oschina.net/hevakelcj/blog/313212 基础知识 Linux系统内核内建了netfilter防火墙机制.Netfilter(数据包 ...
- 寒冰王座(hd1248)
寒冰王座 Problem Description 不死族的巫妖王发工资拉,死亡骑士拿到一张N元的钞票(记住,只有一张钞票),为了防止自己在战斗中频繁的死掉,他决定给自己买一些道具,于是他来到了地精商店 ...
- MVC4商城项目一:框架设计
代码已托管在 https://code.csdn.net/denghao156/ktnmb_mvc4 先上图,设计模式参考:ddmvc4.codeplex.com 一.unintofwork 设计 ...
- 在Azure Cloud Service中部署Java Web App(2)
接上文. 9.在进行发布之前,需要对我们的订阅做一些设置,因为默认情况下,Azure的service end指向的是Azure global的站点,如果我们要将服务发布在Azure的中国站点,需要做下 ...
- HDOJ-1003 Max Sum(最大连续子段 动态规划)
http://acm.hdu.edu.cn/showproblem.php?pid=1003 给出一个包含n个数字的序列{a1,a2,..,ai,..,an},-1000<=ai<=100 ...
- 深入浅出CChart 每日一课——第十六课 实习之旅,百年老店之新锐WTL
上节课笨笨给大家介绍了CChart在微软MFC框架下的应用,本节课的内容仍然和百年老店微软相关,只不过主角换成WTL了. 不了解WTL的同学可以先找度娘温习一下.度娘在怀,今生何求.郎君啊,你是不是闷 ...