2017-07-14 116 views
2

我开发一个Node.js应用程式,我需要执行Java代码中执行的Java项目。与节点的JRE模块

我使用去节点的JRE模块(https://www.npmjs.com/package/node-jre)。

在这个网站的例子(Hello.class)与该代码运行正常和compilling德Hello类通过控制台的javac Hello.java

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文件。所以,这是我尝试的第一件事:将该项目导出到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

+0

什么是你清单文件看起来像在jar里面?主类是否被声明?类路径? – Adonis

+0

Manifiest:'Manifest-Version:1.0 Class-Path:。 主类:com.package.example1.ClassName' – aitana

+0

您可以编辑您的文章,如果需求是添加细节。同时请检查如何创建一个MCVE:https://stackoverflow.com/help/mcve它将帮助任何人看到帖子了解并重现您的问题 – Adonis

回答

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