使用node-jre模块执行java项目

时间:2017-07-14 11:13:37

标签: java node.js

我正在开发一个node.js应用程序,我需要执行java代码。

我正在使用de node-jre模块(https://www.npmjs.com/package/node-jre)。

此Web(Hello.class)中的示例使用此代码正确运行,并通过控制台使用 javac Hello.java 编译de Hello类:

    var output = jre.spawnSync(  // call synchronously 
    ['java'],                // add the relative directory 'java' to the class-path 
    'Hello',                 // call main routine in class 'Hello' 
    ['World'],               // pass 'World' as only parameter 
    { encoding: 'utf8' }     // encode output as string 
  ).stdout.trim(); 

问题是我试图执行我的java项目(用eclipse开发)。文档说在这个目录'java'里面搜索jar文件。所以,这是我尝试的第一件事:将proyect导出到jar,但它不起作用。

那么,我怎样才能执行一个完整的项目(只有一个主类)?我认为重要的是说项目使用外部库。

jar内的META-INF / MANIFEST.MF看起来像:

Manifest-Version: 1.0
Class-Path: .
Main-Class: com.packagename.example1.ClassName

Name: org/apache/oro
Specification-Title: Jakarta ORO
Implementation-Title: org.apache.oro
Implementation-Version: 2.0.8 2003-12-28 11:00:13
Specification-Version: 2.0.8
Specification-Vendor: Apache Software Foundation
Implementation-Vendor: Apache Software Foundation

所以,我的代码是:

 var output = jre.spawnSync(  // call synchronously 
    ['java'],                // add the relative directory 'java' to the class-path 
    'ClassName',                 // call main routine in class 'Hello' 
    ['World'],               // pass 'World' as only parameter 
    { encoding: 'utf8' }     // encode output as string 
  ).stdout.trim(); 

我也尝试过:

 var output = jre.spawnSync(  // call synchronously 
        ['java'],                // add the relative directory 'java' to the class-path 
        'com.packagename.example1.ClassName',                 // call main routine in class 'Hello' 
        ['World'],               // pass 'World' as only parameter 
        { encoding: 'utf8' }     // encode output as string 
      ).stdout.trim();

'java'是我在节点中与 server.js

处于同一级别的文件夹

1 个答案:

答案 0 :(得分:1)

问题在于我只是将.jar文件放在目录中,而正确的方法是将完整路径放到jar文件中: java / Nameofjarfile.jar

 var output = jre.spawnSync(  // call synchronously 
        ['java/Nameofjarfile.jar'],                // add the relative directory 'java' to the class-path 
        'com.packagename.example1.ClassName',                 // call main routine in class 'Hello' 
        ['World'],               // pass 'World' as only parameter 
        { encoding: 'utf8' }     // encode output as string 
      ).stdout.trim();