zoukankan      html  css  js  c++  java
  • 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
    ',"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

  • 相关阅读:
    android 生命周期图
    c++中 箭头> 双冒号:: 点号.操作符区别
    Blocks 笔记
    使用AVAudioRecorder 录音
    音频输入大小变化图
    【Linux】本机与服务器文件互传、Linux服务器文件上传下载
    【Oracle】Oracle解锁、Oracle锁表处理
    使用three.js创建3D机房模型分享一
    WPF下递归生成树形数据绑定到TreeView上
    (转载)C++抽象工厂模式(大话设计模式)
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/13884229.html
Copyright © 2011-2022 走看看