【问题标题】:Verify if Java is installed from Node.js验证是否从 Node.js 安装了 Java
【发布时间】:2013-11-13 02:37:21
【问题描述】:

我正在构建一个在 Node.js 中使用 Java 的应用程序。我做了一个函数来检查 Java 版本:

function javaversion() {
    var spawn = require('child_process').spawn('java', ['-version']);
    spawn.stderr.on('data', function(data) {
        data = data.toString().split('\n')[0];
        var javaVersion = new RegExp('java version').test(data) ? data.split(' ')[2].replace(/"/g, '') : false;
        if (javaVersion != false) {
            // TODO: We have Java installed
        } else {
            // TODO: No Java installed
        }
    });
}

但是对于没有安装 Java 的系统,Node.js 会抛出 ENOENT 错误,因为模块“child_process”无法生成进程。如何验证是否从 Node.js 安装了 Java?

感谢您的帮助!

【问题讨论】:

  • 您是否考虑过检查环境变量,例如类路径或...?然后寻找二进制文件?
  • @WiredPrairie,是的,我考虑过,但这对所有系统来说都不是一个好主意。例如,在 OS X 10.8 中,没有设置 CLASSPATH。我解决了处理不生成进程错误的问题,就像 Sudsy 建议的那样。谢谢。
  • 我已经安装了 Java(根据 Windows 安装程序),但它不在路径中,因此此方法完全失败。因此,对于“所有系统”来说,这似乎并不是一个好的解决方案。

标签: java javascript node.js


【解决方案1】:

这个呢?

function javaversion(callback) {
    var spawn = require('child_process').spawn('java', ['-version']);
    spawn.on('error', function(err){
        return callback(err, null);
    })
    spawn.stderr.on('data', function(data) {
        data = data.toString().split('\n')[0];
        var javaVersion = new RegExp('java version').test(data) ? data.split(' ')[2].replace(/"/g, '') : false;
        if (javaVersion != false) {
            // TODO: We have Java installed
            return callback(null, javaVersion);
        } else {
            // TODO: No Java installed

        }
    });
}

javaversion(function(err,version){
    console.log("Version is " + version);
})

【讨论】:

  • 如何检查JDK 是否安装?如果未安装,请安装它。
  • 在 openjdk 上失败。将正则表达式从 'java version' 更改为 '(java|openjdk) version' 以在 openjdk 上工作。
猜你喜欢
  • 2016-11-23
  • 2011-05-05
  • 1970-01-01
  • 2018-11-23
  • 1970-01-01
  • 1970-01-01
  • 2013-02-04
  • 2021-01-04
  • 2016-01-10
相关资源
最近更新 更多