nodejs调用jar

目前nodejs调用jar主要有两种方式:

  • 通过创建子进程运行java -jar命令调用包含main方法的jar
  • 使用node-java通过c++桥接调用jar

方法一(子进程运行):

const { spawn } = require('child_process');
const child = spawn('java', ['-jar', ${__dirname}/Main.jar]);

child.stdout.on('data', (data) => {
  console.log(child stdout: ${data})
});

child.stderr.on('data', (data) => {
  console.error(stderror ${data});
});

child.on('exit', function(code, signal){
  console.log('child process exited with' + code ${code} and signal ${signal});
});

在makefile文件目录下执行make打包Main.jar

.
├── Main.java
├── makefile
└── manifest.txt

makefile

JFLAGS = -g
JC = javac
JAR = jar
JARFLAGS = cvfe
.SUFFIXES: .java .class .jar
.java.class:
$(JC) $(JFLAGS) $*.java
.class.jar:
$(JAR) $(JARFLAGS) Main.jar Main *.class
CLASSES = \
Main.java
default: jar
classes: $(CLASSES:.java=.class)
jar: $(CLASSES:.java=.jar)
clean:
$(RM) *.class
$(RM) *.jar%

manifest.txt

Main-Class: Main%

Main.java

package com.lablelan;
public class Hello {
    public static void main(String[] args) {
        System.out.println("hello world");
    }
}

输出结果:

child stdout: hello world
child process exited withcode 0 and signal null

方法二(通过c++桥接):

var java = require('java');
var javaLangSystem = java.import('java.lang.System');
var num = java.newLong(100);
// 函数以Sync结尾会运行在v8主线程
javaLangSystem.out.printlnSync('Hello World');
  // 函数不带Sync将会运行在v8的非主线程的工作线程
  num.toString((err, data)=>{
  console.log("data: ", data)
})
// process.exit(0);

安装环境

注意这里需要有java8环境,如果报错找不到./build/jvm_dll_path.json可以执行node_modules/java/postInstall.js生成
出现安装问题可以参考 https://github.com/joeferner/node-java
npm install -g node-gyp
npm install java

输出结果

Hello World
data: 100

Original: https://www.cnblogs.com/lablelan/p/15836905.html
Author: lable
Title: nodejs调用jar

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/609880/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球