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

我正在开发一个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'searchjar文件。 所以,这是我尝试的第一件事:导出到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节点中的文件夹

       

网上收集的解决方案 "使用node-jre模块执行java项目"

问题是我只是把目录放在.jar文件中,正确的方法是把完整的path放到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();