nodejs java 互调用

nodejs 与java的互调用方法很多,我们可选的是使用oracle 新的vm 引擎(graalvm很不错)
还有就是基于browserify进行包装,同时给java 提供一套require 的模式机制,但是对于原
生的nodejs 来说就有一些问题了,社区有人提供了一个基于jni的node 包装(但是安装不是
很方便)

试用

  • 安装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 是一个不错的选择

参考资料

https://www.npmjs.com/package/java
https://github.com/joeferner/node-java
https://github.com/CraZySacX/node-jdbc#readme
https://www.npmjs.com/package/node-java-maven
https://github.com/joeferner/node-java-maven#readme

posted on   荣锋亮  阅读(6889)  评论(0编辑  收藏  举报

编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2019-10-27 dolt 基于git协议的数据管理工具
2019-10-27 docz 强大简单的文档管理工具
2019-10-27 yugabyte 安装pg extention
2018-10-27 hasura graphql-engine v1.0.0-alpha26 版本新功能试用
2018-10-27 hasura graphql-engine v1.0.0-alpha26 版本新功能

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示