2013-11-01 12 views
3

Node.js에서 Java를 사용하는 응용 프로그램을 빌드하고 있습니다. Java가 Node.js에서 설치되었는지 확인하십시오.

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 
     } 
    }); 
} 

그러나 자바, Node.js를 던지고있다 ENOENT 오류가 설치되지 않은 시스템

모듈 "child_process"때문에 그냥 프로세스를 생성 할 수 없습니다 나는 자바 버전을 확인하는 기능을했다. Java가 Node.js에서 설치되었는지 어떻게 확인할 수 있습니까?

감사합니다.

+0

classpath 또는 ...와 같은 환경 변수를 검사 해 보았습니까? 그리고 바이너리를 찾고 있습니까? – WiredPrairie

+0

@WiredPrairie 예, 고려했습니다.하지만 모든 시스템에서 좋은 생각은 아닙니다. 예를 들어, OS X 10.8에서는 CLASSPATH가 설정되지 않습니다. Sudsy가 제안한 것처럼 프로세스를 생성하지 않는 오류를 처리하는 문제를 해결했습니다. 고맙습니다. – Formiga

+0

Windows 설치 프로그램마다 Java가 설치되었지만 경로에 있지 않으므로이 방법은 완전히 실패합니다. 그래서, "모든 시스템"을위한 좋은 해결책처럼 보이지는 않습니다. – WiredPrairie

답변

6

어떨까요?

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); 
}) 
+0

당신이 옳습니다. '오류'이벤트가 누락되었습니다. 감사. – Formiga

관련 문제