nodejs 中调用java

java由于其历史悠久,有很多有用的jar包,nodejs作为比较新的平台,相比之下还是有所欠
缺的。本篇文章介绍如何在nodejs中调用java程序,这样既能用你熟悉的js语言,又能享用
java的成熟工具。

下面以nodejs中调用 yuicompressor.jar 这个jar包进行压缩的示例来说明node调用java的
完整过程——尽管yuicompressor.jar已经很大程度上被uglifyjs代替了。

类似的,这个例子也可以调用 google 的压缩工具 compiler.jar

windows 环境中 nodejs 调用 java

  1. 确保你已经正确的安装了java,你可以通过下面的代码来检查是否安装成功
java -version

若看到类似下面的截图,表示安装成功了
Alt Text

  1. 用nodejs封装cmdline下的命令

下载yuicompressor.jar ,建立一个测试文件test.js,内容随便写点什么

在windows命令行中,压缩这个js的命令是:

java -jar yuicompressor.jar test.js

上面的命令实际上完整的是(windows有个cmd.exe来完成实际的工作)

cmd /c java -jar yuicompressor.jar test.js

nodejs提供了spawn工具来执行外部程序命令,详见 nodejs文档

完整的代码如下

var spawn = require('child_process').spawn;


exe(["/c","java","-jar","yuicompressor.jar","test.js"]);
// 相当于在命令行下执行 cmd /c java -jar yuicompressor.jar test.js
// 也可以加入更多的参数

function exe(command){
    // windows下 
    var cmd = spawn("cmd",command);

    cmd.stdout.setEncoding("ASCII");
    cmd.stdout.on("data",function(data){
    console.log("------------------------------");
    console.log("exec",command);
    console.log("stdout:"+data);
    });

    cmd.stderr.on("data",function(data){
    console.log("------------------------------");
    console.log("stderr:"+data);
    console.log("------------------------------");
    });

    cmd.on("exit",function(code){
    console.log("exited with code:"+code);
    console.log("------------------------------");
    });
};

将上面的代码保存为 node-compress.js,执行即可

node node-compress.js

linux 版本

linux 调用java不用像windows 那样:

cmd /c java -jar yuicompressor.jar test.js

而是直接调用

java -jar yuicompressor.jar test.js

即可

所以完整的代码是:

var spawn = require('child_process').spawn;

exe(["-jar","yuicompressor.jar","test.js"]);
// 相当于在命令行下执行 java -jar yuicompressor.jar test.js

function exe(command){

    // linux下,不用 cmd /c java -jar yuicompressor.jar test.js,这种形式,直接
    // java -jar yuicompressor.jar test.js 即可
    var cmd = spawn("java",command);

    cmd.stdout.setEncoding("ASCII");
    cmd.stdout.on("data",function(data){
    console.log("------------------------------");
    console.log("exec",command);
    console.log("stdout:"+data);
    });

    cmd.stderr.on("data",function(data){
    console.log("------------------------------");
    console.log("stderr:"+data);
    console.log("------------------------------");
    });

    cmd.on("exit",function(code){
    console.log("exited with code:"+code);
    console.log("------------------------------");
    });
};