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
下一篇将提供一个事例项目及结合简单的源码分析对node-java进行详细讲解
nodejs调用jar的更多相关文章
- NodeJS调用jar包
我们在实际的生产.开发实践中,其实要和许多第三方服务商进行打交道,这其中包括使用他们提供的批量与联机服务,但与别的互联网企业不大相同的是,银行作为传统企业,其一贯重视安全性,许多在互联网企业看似理所当 ...
- Unity调用Android的两个方式:其一、调用jar包
unity在Android端开发的时候,免不了要调用Java:Unity可以通过两种方式来调用Android:一是调用jar.二是调用aar. 这篇文章主要讲解怎么从无到有的生成一个jar包,然后un ...
- Loadrunner11.0调用Jar包
又好几天不写东西了,是不是意味着最近没有大的进步,时时敲打自己. 今天把loadrunner如何调用Jar包搞定了,现在把配置的过程中需要注意的东西写下来,分享给小伙伴儿,减少他们在前行路上的弯路. ...
- Python 的 JPype 模块调用 Jar 包
背景与需求 最近学习并安装使用了HttpRunner框架去尝试做接口测试,并有后续在公司推广的打算. HttpRunner由Python开发,调用接口时需要依赖Python:而大多数公司的扩展工具包使 ...
- 简单上手nodejs调用c++(c++和js的混合编程)
因为项目的原因,最近经常使用node.js搭RESTful接口. 性能还是很不错啦,感觉比Spring Boot之类的要快.而且在不错的性能之外,只要程序结构组织好,别让太多的回调把程序结构搞乱,整体 ...
- html实现调用jar包
整体思路:html引用URL protocol-本地注册表key,key对应某一c#写的exe可执行文件,由exe可执行文件调用cmd,cmd执行jar包. 1.添加注册表: Windows Regi ...
- winform调用jar包
因为工作需要,需要做一个数据上传的程序,客户规定的是:数据接口采用http连接,采用JSON-RPC轻量级远程调用协议.所以决定用winform做一个管理界面(其中还包括其他的功能),java完成数据 ...
- (转载)Python 的 JPype 模块调用 Jar 包
Python 的 JPype 模块调用 Jar 包 背景与需求 最近学习并安装使用了HttpRunner框架去尝试做接口测试,并有后续在公司推广的打算. HttpRunner由Python开发,调用接 ...
- Python调用jar包中的方法
[本文出自天外归云的博客园] 需求 最近在后台项目代码中一段自定义的AES加解密的程序在平时的测试工作中应用频繁.因为写脚本经常会需要使用,而经过各种尝试,比如jpype等,都不尽如人意.最后转换思路 ...
随机推荐
- Java 高效编程(Effective Java)中文第三版(补档)
来源:sjsdfg/effective-java-3rd-chinese <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过, ...
- AT2395 [ARC071C] TrBBnsformBBtion
基于观察,可以发现以下两条性质: A 可以到 BB,BB 也可以到 A,对 B <-> AA 也是同理的. 可以通过这两个操作交换相邻元素. 对于前者,只需证明 BB 可以到 A 即可,不 ...
- 【转】C# / Extension 扩展方法
扩展方法简介扩展方法使你能够向现有类型"添加"方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型. 扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调 ...
- 直播媒体流red5
第一步下载 安装setup-Red5-1.0.1-java6.exe 安装教程网上有很多 显示如下页面说明安装成功 第二步 下载oflaDemo的 解压放在 第三步 打开 然后 ok了 注意:下面的 ...
- go基础——switch语法
package main import "fmt" /* switch语法结构: switch 变量名 { case 数值1:分支1 case 数值2:分支2 ... defaul ...
- 汉明码、海明校验码(Hamming Code)
目录 基础知识 汉明码/海明校验码 计算 基础知识 码距:又叫海明距离,是在信息编码中,两个编码之间对应位上编码不同的位数.例如编码100110和010101,第1.2.5.6位都不相同,所以这两个编 ...
- LeetCode随缘刷题之截断句子
这道题相对比较简单.正好最近学到StringBuilder就用了. package leetcode.day_12_06; /** * 句子 是一个单词列表,列表中的单词之间用单个空格隔开,且不存在前 ...
- 通过loganalyzer展示数据库中的日志
一.安装mysql # yum -y install mariadb-server # systemctl enable --now mariadb && systemctl stat ...
- uos系统安装tree
apt install tree 提示无法安装软件包 执行apt update 然后执行apt install tree
- Spring系列11:@ComponentScan批量注册bean
回顾 在前面的章节,我们介绍了@Comfiguration和@Bean结合AnnotationConfigApplicationContext零xml配置文件使用Spring容器的方式,也介绍了通过& ...