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

news2025/1/12 1:46:17

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))//b
 
var 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.coloradmin.cn/o/703997.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何让其他电脑连接自己电脑上的虚拟机

想使用电脑A连接电脑B中的虚拟机有两种方式(这里说的都是windows环境,并且都在A和B在同一网络环境下) 方式一 通过配置windows防火墙中的入站规则,以开放端口的形式访问,但是这种方式电脑A中没法配置电脑B中虚拟机的域名映射.方式二 通过更改虚拟机的网络连接模式,并且要修改虚…

爬虫入门指南(2):如何使用正则表达式进行数据提取和处理

文章目录 正则表达式正则表达式中常用的元字符和特殊序列案例 使用正则表达式提取数据案例存储数据到文件或数据库使用SQLite数据库存储数据的示例代码SQLite基本语法创建表格&#xff1a;插入数据&#xff1a;查询数据&#xff1a;更新数据&#xff1a;删除数据&#xff1a;条…

尚硅谷Docker实战教程-笔记05【本地镜像发布到阿里云与私有库】

尚硅谷大数据技术-教程-学习路线-笔记汇总表【课程资料下载】视频地址&#xff1a;尚硅谷Docker实战教程&#xff08;docker教程天花板&#xff09;_哔哩哔哩_bilibili 尚硅谷Docker实战教程-笔记01【理念简介、官网介绍、平台入门图解、平台架构图解】尚硅谷Docker实战教程-笔…

LinkedHashMap 学习了解

一、概念 定义&#xff1a; public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V> LinkedHashMap 继承 HashMap 的功能&#xff0c;增加保证了元素的有效 /*** The head (eldest) of the doubly linked list.* 双向列表&#xff0c;表…

本地axure做好的展示网站如何发布到互联网上访问?快解析端口映射

Axure 是产品经理常用的原型设计工具&#xff0c;设计的原型导出的html就是一个静态网站的文件&#xff0c;可以部署在服务器、对象存储上做成一个静态网站&#xff0c;然后通过 快解析免费域名&#xff08;或自己的独立域名&#xff09;外网访问&#xff0c;用它就可以完成从设…

WebView头部添加android原生视频播放

需求&#xff1a;我们需要做一个h5页面&#xff0c;并且可以现实加载更多&#xff0c;并且头部我们想要加一个视频播放器&#xff0c;因为h5不够丝滑。 话不多说咱们直接上代码 Xml布局&#xff1a; <?xml version"1.0" encoding"utf-8"?> <…

finalshell提示java.net.ConnectException: Connection timed out: connect

为什么超时&#xff1f; 事情是这样的&#xff0c;为了不向学校低头&#xff0c;我没有开通校园网&#xff0c;买了流量卡&#xff0c;于是每次都给电脑开热点&#xff0c;朋友叫我吃饭&#xff0c;我直接就走了&#xff0c;干完饭回来&#xff0c;在finalshell里面它提示java.…

ASEMI代理光宝光耦LTV-6341的应用与性能分析

编辑-Z 本文将全面深入地探讨光耦LTV-6341的应用与性能。首先&#xff0c;我们将介绍光耦LTV-6341的基本概念和工作原理&#xff0c;然后&#xff0c;我们将详细分析其在电子设备中的应用&#xff0c;接着&#xff0c;我们将对其性能进行深入的分析&#xff0c;最后&#xff0…

US-P1-R-S单路控制比例阀放大器

US-P1-R-S、US-P1-R-C、US-P2-R-S、US-P2-R-C、US-P1-M-C、US-P2-M-S M12插头端子号 &#xff08;US-P1-…-C&#xff09; 线缆颜色 &#xff08;US-P1-…-S&#xff09; 端子定义 &#xff08;US-P1-R&#xff09; 端子定义 &#xff08;US-P1-M&#xff09; 1 红 2 …

【零基础学习C++】如何写一个C++类?

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️系列专栏:零基础学习C】 文章目录 前言什么是类&#xff1f;&#x1f914;类的三大特性&#x1f463;定义一个类&#x1f4bb;类的实例化&#x1f52c; 前言 类是对现实生活中一类具有共同特征的事物…

第五章.­ ­ Training Versus Testing

第五章. Training Versus Testing 上一章主要介绍机器学习的可行性。由NFL定理可知&#xff0c;机器学习貌似是不可行的&#xff0c;但是随后引入了统计学知识&#xff0c;如果样本数量足够大&#xff0c;且hypothesis数量有限&#xff0c;那么机器学习一般是可行的&#xff0…

哪款是你值得拥有地图可视化开发平台

地图可视化在当今的数据分析和决策制定等领域中发挥着越来越重要的作用&#xff0c;越来越多的企业和个人开始关注和使用这一技术。而地图可视化开发平台作为地图可视化的重要工具和平台&#xff0c;其选择合适的产品对于产品效果和开发效率都具有非常重要的意义。在选择地图可…

Spring Boot中的SimpMessagingTemplate是什么,原理,以及如何使用

Spring Boot中的SimpMessagingTemplate是什么&#xff0c;原理&#xff0c;以及如何使用 SimpMessagingTemplate是Spring Framework中的一个类&#xff0c;用于向WebSocket客户端发送消息。在Spring Boot应用程序中&#xff0c;可以使用SimpMessagingTemplate来实现WebSocket通…

【GPT】中文大语言模型梳理与测评(C-Eval 、AGIEval、MMLU、SuperCLUE)

文章目录 概述申请后直接使用大模型开源可本地部署 通识数据集测评&#xff08;C-Eval 、AGIEval、MMLU、SuperCLUE&#xff09;自媒体报道SuperCLUE&#xff1a;中文通用大模型综合性基准C-Eval&#xff1a;中英测评&#xff08;清华上交提出&#xff09;当前排名&#xff08;…

Object counting——生成密度图density map

文章目录 过程代码参考 过程 首先构造一个和原始图片大小相同的矩阵&#xff0c;并将其全部置为0&#xff0c;然后将每个被标记的人头对应的位置置为1&#xff0c;这样就得到了一个只有0和1的矩阵&#xff0c;最后通过高斯核函数进行卷积得到一个连续的密度图。 代码 import…

如何对修改密码接口进行压测?终于找到解决办法了

做接口测试中&#xff0c;对于一般性的单业务接口测试很多工具可供选择&#xff0c;但是对于一些相关业务相关性的关联接口测试就比较麻烦&#xff0c;使用工具比如jmeter、postman、soapui等等就比较麻烦。我比较偏重脚本化执行测试用例&#xff0c;所以选择了groovy作为主要语…

JAVA选择题笔试:static成员与非static成员、父类子类方法的继承、接口与抽象类、final的使用

0、前言 本文针对一些java基础知识的一些考点做出解析。 1、静态成员 与 非静态成员 静态变量与静态方法都是静态成员。 先说静态变量与普通成员变量的区别&#xff0c;例如如下两个变量&#xff1a; public class Demo {public static String A "静态变量";publi…

迅镭激光高功率切割机成功交付招商重工,助推船舶行业智造升级!

近日&#xff0c;迅镭激光-招商重工高功率激光切割机交机仪式在招商局重工(江苏)有限公司顺利举行。 招商重工项目负责人佘刚林、孙宗宇&#xff0c;迅镭激光总经理助理刘富生、营销中心行业总监杨林等领导参加交付仪式&#xff0c;共同见证了这一激动人心的时刻。 本次交付的机…

日历组件 el-calendar 实现标记功能

需求&#xff1a;在日历组件中选择月份时&#xff0c;可以显示当月已经质检或需质检的数据 思路&#xff1a;前端每次点击日期选择器的时候调用接口&#xff0c;接口返回当月需要质检或已质检的数据&#xff0c;前端拿到数据就开始做判断然后回显。 大体样式 代码&#xff1a…

【每日一短语】给某人严重的惊吓

1、短语及释义 scare the pants off sb. 释义&#xff1a; 把某人的裤子吓掉&#xff1b;引申为严重的惊吓 2、示例及出处 美剧&#xff1a;《生活大爆炸》第八季第2集 The Big Bang Theory, Season 8 Episode 2 Leonard Hofstadter: I think the idea that someone could be …