Java调用Lua脚本(LuaJava使用、安装及Linux安装编译)

依赖包(附件有下载): java

包名 类型 操做系统
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目录 

四、重启项目 

注:LuaJava1.1缺乏了JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState__1pushInteger (JNIEnv * env , jobject jobj , jobject cptr , jint number) 方法的实现,编译前可编辑src/c/luajava.c加入如下代码实现再make 

linux

C代码   收藏代码
  1. /************************************************************************ 
  2. *   JNI Called function 
  3. *      Lua Exported Function 
  4. ************************************************************************/  
  5.    
  6. JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState__1pushInteger  
  7.   (JNIEnv * env , jobject jobj , jobject cptr , jint number)  
  8. {  
  9.    lua_State * L = getStateFromCPtr( env , cptr );  
  10.    
  11.    lua_pushinteger( L, ( lua_Integer ) number );  
  12. }  



LuaUtil.java web

Java代码   收藏代码
    1. /** 
    2.  * 调用Lua脚本 
    3.  * @author chamcon 
    4.  * @date 2013-11-07 15:58:48 
    5.  */  
    6. public class LuaUtil {  
    7.     public static List<String> PUBLIC_LUA_FILES = new ArrayList<String>();  
    8.     public static Logger logger = Logger.getLogger(LuaUtil.class);  
    9.       
    10.     static {  
    11.         //配置公共函数lua文件  
    12.         //PUBLIC_LUA_FILES.add("");  
    13.     }  
    14.       
    15.     /** 
    16.      * 执行Lua脚本 
    17.      */  
    18.     public static String execLuaFunc(String lua,String funcName,String value){  
    19.         //依赖库文件要放到java.library.path下  
    20.         logger.debug("java.library.path:"+System.getProperty("java.library.path"));  
    21.           
    22.         LuaState L = LuaStateFactory.newLuaState();  
    23.         // 加载lua标准库,不然一些lua基本函数没法使用  
    24.         L.openLibs();  
    25.           
    26.         //加载公共函数文件  
    27.         if(!PUBLIC_LUA_FILES.isEmpty()){  
    28.             for(int i=0;i<PUBLIC_LUA_FILES.size();i++){  
    29.                 L.LdoFile(PUBLIC_LUA_FILES.get(i));  
    30.             }  
    31.         }  
    32.           
    33.         //加载函数串  
    34.         L.LdoString(lua);  
    35.         //调用函数名  
    36.         L.getField(LuaState.LUA_GLOBALSINDEX, funcName);  
    37.         //设置参数  
    38.         L.pushString(value);  
    39.           
    40.         //调用  
    41.         L.call(11);  
    42.           
    43.         //设置返回对象  
    44.         L.setField(LuaState.LUA_GLOBALSINDEX, "RESULT");  
    45.         LuaObject lobj = L.getLuaObject("RESULT");  
    46.            
    47.         //获取返回值  
    48.         String res = lobj.getString();  
    49.         L.close();  
    50.   
    51.         if(res == nullreturn "";  
    52.         return res;  
    53.     }  
    54. }  
相关文章
相关标签/搜索