2017-07-14 106 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();