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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM