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. }  
相關文章
相關標籤/搜索