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的路径即可

如果不存在 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里

修改后打包结果为:目录中多了app.asar.unpacked

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>