在某些情况下,存在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>