node.js通过node-java库调用java接口(jar包)

node.js通过node-java库调用java接口

  • 1、业务需要
  • 2、开发环境
  • 3、调用java包简单实例
  • 4、调用自定的jar包接口

1、业务需要

最近因项目需求,需要调用第三方java的打的jar包,但项目后端是用node.js写的,因此需要用node.js调用第三方jar,网上搜集资料,发现有一个库,node-java,可以通过js的方式调用java语言的包,以及包中的方法,因此整理了一下,以防时间长忘记,具体如下:

2、开发环境

  • jdk 1.8 并配置java_home、path
  • node.js12.13.1

有了上面的环境准备,接着就可以安装node-java依赖了。

 npm install java --save
这一步会进行源码编译,所以会自动运行node-gyp,接着利用系统中的msbuild进行源码编译。没有报错就安装成功了。如果编译安装java依赖失败,回头检查msbuild,jdk安装情况。

3、调用java包简单实例

const java = require("java")
var javaLangSystem = java.import("java.lang.System")
javaLangSystem.out.printlnSync("hello") //hello
var list1 = java.newInstanceSync("java.util.ArrayList")
list1.addSync("a")
list1.addSync("b")
console.log(list1.toStringSync()) //[a,b]
console.log(list1.sizeSync())//2
console.log(list1.getSync(1))//bvar ArrayList = java.import("java.util.ArrayList")
var list2 = new ArrayList()
list2.addSync("a")
list2.addSync("b")
console.log(list2.toStringSync()) //[a,b]
console.log(list2.sizeSync())//2
console.log(list2.getSync(1))//b

运行程序,打印信息如下:
在这里插入图片描述
以上示例演示了js调用java原生的方法,很多方法在调用的时候,与java有一些区别,方法后面都带着Sync后缀,表示同步方法,也好理解,node很多操作都是异步的,要想直接得到结果,就需要调用同步方法,就好比在进行文件操作那样:fs.readSync(),fs.mkdirSync() 。

4、调用自定的jar包接口

准备一个Test.java

package com.xxx;
public class Test{public static String hello(String name){return "hi,"+name;}
}

编译,打jar包。
然后将jar包放到jdk的环境的java_home的jre\libe\ext文件下,相当于把自己打的jar包放到java开放环境中去,在调用的时候引jar包时候,引入jar路径就可以不用在写了,我本地路径是:

C:\Program Files\Java\jdk1.8.0_191\jre\lib\ext

然后,运用node.js调用

调用方法:

const java = require("java") //应用java模块
java.classpath.push(".")  //jar包路径(如果jar包放在了jre\lib\ext文件下,用'.'表示就可以了,或者写jar包的绝对路径)方法一:
var Test = java.import("com.xxx.Test")  //引入包路径
var res = Test.helloSync("buejee")      //调用jar中的方法,传入参数方法二:
let res = java.callStaticMethodSync("com.xxx.Test","hello","buejee");
//第一个参数包路径,第二个参数方法名,第三个参数是传入接口参数console.log(res)

运行结果如下:
在这里插入图片描述
至此,js调用java示例介绍完了,其实没尝试的时候,觉着可能有一些神秘,但是当我们了解了之后,发现,就是一个混合调用的过程,需要我们熟悉java语言,也要熟悉javascript,这种调用没有太大的意义,因为很多事情java可以做,node同样可以做,而且这种调用环境非常复杂,不仅需要jdk,还需要msbuild,就是c源码编译,对机器环境要求较高。

注意:引入jar包路径时候,不要用相对路径,我尝试用相对路径引用的没有成功,具体原因可能是下面调用包的路径,不支持用相对路径。可以将jar包方到<java_home>\jre\lib\ext下面或者用绝对路径

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/3037.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云原生监控平台 Prometheus 的相关概念及部署

1 Prometheus简介 Prometheus 是一个开源的系统监控和报警系统&#xff0c;在 2012 年由 SoundCloud 公司创建&#xff0c;并于 2015 年正式发布。2016 年&#xff0c;Prometheus 正式加入 CNCF (Cloud Native Computing Foundation)&#xff0c;成为继kubernetes之后第二个在C…

菜鸡shader:L5 fresnel、matcap和cubemap

文章目录 Fresnelshader forge实现UE4蓝图实现 Matcapshader forge实现UE4蓝图实现 CubeMapSD和PS制作所需的贴图shader forge实现unity代码实现UE4蓝图实现(未实现) Fresnel shader forge实现 个人理解是&#xff0c;使用观察方向和法向方向点乘&#xff0c;那就相当于我们的视…

聚合函数group byhaving

聚合函数&group by group by 字段名 规定依据哪个字段分组聚合 group by核心子句是可选项&#xff0c;使用该子句是为了依据相同字段值分组后进行聚合运算&#xff0c;常和聚合函数联用 不使用group by 子句时使用聚合函数&#xff0c;select子句中只能写聚合函数和包含聚…

(16)燃油流量和液位传感器

文章目录 前言 16.1 燃油流量传感器 16.1.1 连接到自动驾驶仪 16.2 燃油液位传感器 16.2.1 PWM油位传感器 16.2.2 模拟油位传感器 前言 在 4.0 及以后的固件版本中&#xff0c;ArduPilot 提供了使用燃油流量和液位传感器的能力&#xff0c;此外还有电池监控器。支持脉冲输…

Linux入门

文章目录 一、Linux安装1.1、安装方式介绍1.2、网卡设置1.3、安装SSH连接工具1.4、Linux和windows目录结构对比1.5、Linux目录结构 2、Linux常用命令2.1、Linux命令初体验2.2、使用技巧2.3、命令格式2.4、文件目录操作命令文件目录操作命令ls小知识 文件目录操作命令cat文件目录…

农产品批发采购APP开发 手机里的农产品市场

农业发展是民生之本&#xff0c;随着互联网时代的到来各行各业都迎来了新的发展机遇&#xff0c;农产品批发采购、配送服务等方面也发生了很大的改变&#xff0c;各种农产品商城APP、农产品批发采购平台、农产品供应管理系统的开发让包含农产品信息、数据、物流、配送、仓储、质…

决策树精讲

一、决策树的构造 决策树的构造是一个递归的过程&#xff0c;有三种情形会导致递归返回&#xff1a;(1)当前结点包含的样本全属于同一类别&#xff0c;这时直接将该结点标记为叶结点&#xff0c;并设为相应的类别&#xff1b;(2)当前属性集为空&#xff0c;或是所有样本在所有…

STM32外设系列—DHT11

文章标题 一、DHT11简介二、数据手册分析2.1 接口说明2.2 串行通信说明2.2.1 单总线通信2.2.2 单总线传输数据位定义2.2.3 时序图 三、DHT11程序设计3.1 初始化GPIO3.2 发送起始信号3.3 接收一个字节数据3.4 接收温湿度信息并校准 四、总结 一、DHT11简介 DHT11是一款常用的数…

【新星计划·2023】Linux内核、发行版讲解,它们有什么区别?

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 作者会持续更新网络知识和python基础知识&#xff0c;期待你的关注 目录 一、Linux内核版 二、Linux发行版 1、Debian 2、Slackware 3、Red Hat 4、Gentoo 三、内核版和发行版的区别 1、内核版 2、发行…

BUUCTF 还原大师 1

题目描述&#xff1a; 我们得到了一串神秘字符串&#xff1a;TASC?O3RJMV?WDJKX?ZM,问号部分是未知大写字母&#xff0c;为了确定这个神秘字符串&#xff0c;我们通过了其他途径获得了这个字串的32位MD5码。但是我们获得它的32位MD5码也是残缺不全&#xff0c;E903???4D…

计算机启动

按下主机上的 power 键后&#xff0c;第一个运行的软件是 BIOS,BIOS 全称叫 Base Input & Output System&#xff0c;即基本输入输出系统。 &#xff08;8086的1MB内存&#xff09; 地址 0&#xff5e;0x9FFFF 处是 DRAM&#xff0c;顶部的 0xF0000&#xff5e;0xFFFFF&am…

AR急诊急救大平台远程专家会诊方案

随着AR技术的完善&#xff0c;在医院急救中&#xff0c;需要及时把各方面专家汇在一起会诊&#xff0c;在AR这方面有数据采集清晰&#xff0c;资料呈现方便便捷&#xff0c;针对客户需要&#xff0c;我们对业务需求分析&#xff0c;比较市面多种产品&#xff0c;把会议&#xf…