electron之集成node-java

在某些情況下,存在electron需要調用java的class,或者調用jar包,因此需要引用node-java


一、集成前提

1)electron需要6.0.0版本,7.0.0經反覆測試無法編譯通過,或者提示node的版本不一致等等問題

2)安裝electron-rebuild,以便編譯node-java

3)node版本12.8.1,npm版本6.10.2

4)全局安裝node-gyp 和 Windows-Build-Tools


二、安裝node-java

npm i java --save-dev


三、編譯node-java

.\\node_modules\\.bin\\electron-rebuild.cmd

注:electron-rebuild.cmd是windows下的命令,其他操作系統去掉 .cmd


四、配置node-java

編譯後,在.\\node_modules\\java\\build目錄下會存在 jvm_dll_path.json 文件,其內容為

";E:\\\\Java\\\\jdk1.8.0_162\\\\jre\\\\bin\\\\server"

此內容為jvm.dll文件的路徑,配置為你java環境下的jvm.dll的路徑即可

electron之集成node-java

如果不存在 jvm_dll_path.json 文件,則請手工創建


五、使用node-java

按照node-java的幫助使用如下代碼即可

<code>java = require('java');
//調用靜態方法
let timeMillis = java.callStaticMethodSync("java.lang.System", "currentTimeMillis");
this.currentTimestamp = timeMillis.longValue;/<code>

但是,使用electron-builder打包後,發現運行不起,原因是打包後,java相關文件被打包到app.asar,因此無法正確加載java,需要做如下修改

1)package.json修改

在build裡添加asarUnpack,即不將java相關的文件打包到app.asar裡

electron之集成node-java

修改後打包結果為:目錄中多了app.asar.unpacked

electron之集成node-java

2)加載打包後的java

在代碼中區分打包 或 未打包 加載java

<code>let java;
if (app.isPackaged) {
let javaPath = path.resolve('./') + '/resources/app.asar.unpacked/node_modules/java';
java = require(javaPath);
} else {
java = require('java');
}/<code>


分享到:


相關文章: