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等,都不尽如人意.最后转换思路 ...
随机推荐
- el表达式中的${param}用法
el表达式中的${param}? 1. 2. ${param.name} 等价于 request.getParamter("name"),这两种方法一般用于服务器从页面或者客户端获 ...
- LeetCode.241
241. 为运算表达式设计优先级 题目大意 给定一个含有数字和运算符的字符串,为表达式添加括号,改变其运算优先级以求出不同的结果.你需要给出所有可能的组合的结果.有效的运算符号包含 + - * 思路: ...
- [论文][半监督语义分割]Adversarial Learning for Semi-Supervised Semantic Segmentation
Adversarial Learning for Semi-Supervised Semantic Segmentation 论文原文 摘要 创新点:我们提出了一种使用对抗网络进行半监督语义分割的方法 ...
- JVM常用命令(九)
前面东西说完后,现在可以说一些和我们平时进行性能调优相关的东西了,那怎么看和我们JVM性能调优相关的东西呢,其实这对我们开发来说是一个比较头痛的问题,其实我们JDK官网给了一些我们相关的指令,我们可以 ...
- 【转】Python中自定义可迭代对象
python 中内置的可迭代的对象有 list.tuple.set.dict 等,那么我们自己怎么定义一个可迭代的对象呢?先来段代码吧 import re import reprlib RE_WORD ...
- python基础——异常处理、递归
异常处理 while True: try: num1 = int(input('num1:')) num2 = int(input('num2:')) result = num1 + num2 exc ...
- 简单的JSON数组转树形结构
function toTree(data) { let result = [] if(!Array.isArray(data)) { return result } data.forEach(item ...
- 【CF1194F】Crossword Expert(数学 期望)
题目链接 大意 给你\(N\)个事件,解决每个事件所需的时间有\(1/2\)的概率为\(t[i]\),\(1/2\)的概率为\((t[i]+1)\),给你总时间\(T\),在\(T\)时间内按顺序解决 ...
- 微服务与SpiringBoot
微服务: 微服务是一种架构风格,一般说到微服务都会说"微服务架构",即一个系统的各个功能(如结账,用户等)独立出来,以及各个服务独立出来,每个模块是可独立替换.可独立升级的软件单元 ...
- 干工第一天,这个api超时优化把我干趴下了!
近日我司进行云服务商更换,恰逢由我负责新上线的三方调用 api 维护管理,在将服务由阿里云部署到腾讯云过程中,我们压测发现在腾讯云调用京东接口时 TP999 抖动十分剧烈,尽管业务层有重试操作但是超时 ...