我正在开发一个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
处于同一级别的文件夹答案 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();