机器人论坛
登录
直播中
徐依妮
7年用户
150经验值
私信
关注
[问答]
nodejs与java的互调用方法
开启该帖子的消息推送
nodejs
nodejs 与java的互调用方法很多,我们可选的是使用oracle 新的vm 引擎(graalvm很不错)
还有就是基于browserify进行包装,同时给java 提供一套require 的模式机制,但是对于原
生的nodejs 来说就有一些问题了,社区有人提供了一个基于jni的node 包装(但是安装不是
很方便)
回帖
(1)
李万寿
2020-11-4 11:18:31
试用
安装jdk
按照官方文档的说法,对于jdk9 支持有问题,推荐使用jdk8,同时需要安装jdk 不是jre
试用
yarn init -y
yarn add java
参考代码:
app.js
var java = require('java');
var javaLangSystem = java.import('java.lang.System');
javaLangSystem.out.printf('Hello World %s/r/n',"dalongdemo");
外部依赖(三方jar文件处理)
对于三方jar包的处理我们需要添加classpath,可以通过shadow plugin 或者dependency 解决
参考代码
"use strict";
var fs = require("fs");
var java = require("java");
var baseDir = "./target/dependency";
var dependencies = fs.readdirSync(baseDir);
dependencies.forEach(function(dependency){
java.classpath.push(baseDir + "/" + dependency);
})
java.classpath.push("./target/classes");
java.classpath.push("./target/test-classes");
exports.getJavaInstance = function() {
return java;
}
var java = require("java");
java.classpath.push("commons-lang3-3.1.jar");
java.classpath.push("commons-io.jar");
var list1 = java.newInstanceSync("java.util.ArrayList");
console.log(list1.sizeSync()); // 0
list1.addSync('item1');
console.log(list1.sizeSync()); // 1
java.newInstance("java.util.ArrayList", function(err, list2) {
list2.addSync("item1");
list2.addSync("item2");
console.log(list2.toStringSync()); // [item1, item2]
});
var ArrayList = java.import('java.util.ArrayList');
var list3 = new ArrayList();
list3.addSync('item1');
list3.equalsSync(list1); // true
运行效果
使用node-java-maven管理依赖
添加依赖node-java-maven
yarn add node-java-maven
添加代码依赖
"java": {
"dependencies": [
{
"groupId": "org.apache.lucene",
"artifactId": "lucene-core",
"version": "4.9.0"
}
]
}
下载依赖
./node_modules/.bin/node-java-maven
代码使用
var java = require('java');
var mvn = require('node-java-maven');
mvn(function(err, mvnResults) {
if (err) {
return console.error('could not resolve maven dependencies', err);
}
mvnResults.classpath.forEach(function(c) {
java.classpath.push(c);
console.log(c)
var Version = java.import('org.apache.lucene.util.Version');
console.log(Version)
});
});
运行效果
说明
推荐使用docker或者linux 系统进行安装部署(windows 以及mac 问题比较多),对于依赖管理基于node-java-maven 是一个不错的选择
试用
安装jdk
按照官方文档的说法,对于jdk9 支持有问题,推荐使用jdk8,同时需要安装jdk 不是jre
试用
yarn init -y
yarn add java
参考代码:
app.js
var java = require('java');
var javaLangSystem = java.import('java.lang.System');
javaLangSystem.out.printf('Hello World %s/r/n',"dalongdemo");
外部依赖(三方jar文件处理)
对于三方jar包的处理我们需要添加classpath,可以通过shadow plugin 或者dependency 解决
参考代码
"use strict";
var fs = require("fs");
var java = require("java");
var baseDir = "./target/dependency";
var dependencies = fs.readdirSync(baseDir);
dependencies.forEach(function(dependency){
java.classpath.push(baseDir + "/" + dependency);
})
java.classpath.push("./target/classes");
java.classpath.push("./target/test-classes");
exports.getJavaInstance = function() {
return java;
}
var java = require("java");
java.classpath.push("commons-lang3-3.1.jar");
java.classpath.push("commons-io.jar");
var list1 = java.newInstanceSync("java.util.ArrayList");
console.log(list1.sizeSync()); // 0
list1.addSync('item1');
console.log(list1.sizeSync()); // 1
java.newInstance("java.util.ArrayList", function(err, list2) {
list2.addSync("item1");
list2.addSync("item2");
console.log(list2.toStringSync()); // [item1, item2]
});
var ArrayList = java.import('java.util.ArrayList');
var list3 = new ArrayList();
list3.addSync('item1');
list3.equalsSync(list1); // true
运行效果
使用node-java-maven管理依赖
添加依赖node-java-maven
yarn add node-java-maven
添加代码依赖
"java": {
"dependencies": [
{
"groupId": "org.apache.lucene",
"artifactId": "lucene-core",
"version": "4.9.0"
}
]
}
下载依赖
./node_modules/.bin/node-java-maven
代码使用
var java = require('java');
var mvn = require('node-java-maven');
mvn(function(err, mvnResults) {
if (err) {
return console.error('could not resolve maven dependencies', err);
}
mvnResults.classpath.forEach(function(c) {
java.classpath.push(c);
console.log(c)
var Version = java.import('org.apache.lucene.util.Version');
console.log(Version)
});
});
运行效果
说明
推荐使用docker或者linux 系统进行安装部署(windows 以及mac 问题比较多),对于依赖管理基于node-java-maven 是一个不错的选择
举报
更多回帖
rotate(-90deg);
回复
相关问答
nodejs
nodejs
如何
调用
CH375函数?
2022-11-03
5032
nodejs
调用
CH375函数的问题 ?
2022-11-03
1778
C/C++中
调用
Java
不同类中的静态
方法
有哪些
2021-09-30
1216
LabVIEW如何
调用
Java
程序的问题
2013-10-19
16503
arm汇编和c程序之间如何相
互调用
?
2021-11-30
787
buildroot中添加
nodejs
后推荐加哪些包?
2024-11-01
3177
使用PIM分析仪测试连接器
互调
的新
方法
是什么?
2021-05-10
2515
请问JS api有获取文件列表的接口么?
2022-03-30
1557
将
nodejs
包添加到core-image-minimal但仍然收到命令未找到错误是怎么回事?
2023-04-06
293
一种POI系统无源
互调
的在线测试
方法
讨论
2019-07-17
2825
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
首页
论坛版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分