你是否曾经深入研究过 Node.js 项目,并想过:“我希望我能用这个神奇的 Java 库来完成这一项任务”?又或者,你有一个功能齐全的 Spring Boot 服务器,需要通过 Node.js 应用程序来管理和编排它。
连接 Node.js 和 Java 生态系统并非易事。你可能最终需要编写复杂的 Shell 脚本,手动管理子进程,或者处理复杂的进程间通信。这常常让人感觉笨重而脆弱。
我想要一种更简单的方法。一种“有效”的解决方案,可以.jar直接从我的 JavaScript 代码运行 Java 代码,无论是一个简单的文件还是整个服务器。
这就是我创建java-js-node 的原因。
什么是java-js-node? 它是一个小型的跨平台库,只做一件事并且做得很好:它从 Node.js 运行 Java 代码。
最棒的是?它不需要用户预装 Java。如果系统上找不到合适的 Java 运行时,该库会自动下载并运行一个轻量级的 JRE。这使得您的应用程序具有可移植性,并免除了用户安装的繁琐步骤。
主要特点:
🚀从 Node.js 运行 Java:.jar轻松执行文件或 Java 类。 ☕自动 Java 安装:如果在系统 PATH 上未找到 Java,则下载 JRE。 🖥️跨平台:设计用于 Windows、macOS 和 Linux。 📝简单的 API:一个简单易用的基于承诺的 API。 工作原理:一个简单的例子 让我们看看它的实际效果。首先,在你的 Node.js 项目中安装该库:
npm install java-js-node 现在,假设您有一个名为的简单 Java JAR 文件helloworld-1.0-SNAPSHOT.jar,该文件以一些文件路径作为参数来执行繁重的处理任务,其中 Java 可能胜过 JavaScript。
以下是如何从 Node.js 脚本运行它的方法:
// index.js const { runJar } = require('java-js-node');
// Basic execution with security validation async function helloWorld() { // ✅ JAR validation mandatory for security const isValid = await runJar.validateJar('./test/helloworld-1.0.0-SNAPSHOT.jar'); if (!isValid) { throw new Error('JAR unsafe or corrupted'); }
const result = await runJar('./test/helloworld-1.0-SNAPSHOT.jar');
console.log('Exit code:', result.exitCode);
console.log('Output:', result.stdout);
} 如果需要,您可以实例化特定版本的 Java,如果您需要最低版本或特定版本,请按以下步骤操作:
const NodeJavaRunner = require('java-js-node'); const path = require('path');
async function test() { console.log('🚀 Test Java 25 - Specific version\n'); console.log('🔥 This code will force java to version 25'); const runner = new NodeJavaRunner({ debug: true }); let versions = await runner.getAvailableJavaVersions(); console.log('📋 Available Java versions:', versions);
await runner.init({
jreMajor: 25, // Force to 25
workdir: path.join(__dirname, 'runtime')
});
// Percorso del JAR di test
const jarPath = path.join(__dirname, 'test', 'helloworld-1.0.0-SNAPSHOT.jar');
console.log(`📋 Test del JAR: ${jarPath}`);
console.log(`⚙️ Configuration: Java 25, debug enabled\n`);
const result = await runner.runJar(jarPath, [--someArgs], {
onStdout:(text)=>{
//Some logging function
},
onStderr:(text)=>{
//Some logging function
}
} );
} 就是这样!该库负责查找 Java(或下载 Java)、启动进程,并将输出传输回 Node 脚本。
拓展建筑可能性 这个简单的工具开辟了一些令人着迷的建筑可能性:
混合系统:使用 Node.js 强大的网络和 API 功能,同时将 CPU 密集型任务(如数据处理、图像处理或复杂计算)卸载到强大的 Java 库。 微服务编排:从 Node.js 控制器脚本启动并管理整个 Spring Boot 或 Quarkus 服务器。 遗留代码集成:无需完全重写即可与现有的基于 Java 的工具或企业系统进行交互。您只需将其包装起来,然后从现代 Node.js 后端调用即可。 我需要你的帮助!🙏 java-js-node这个项目还很新,我希望社区能够参与进来。这就是你的机会!
在不同平台上测试:我已经在我的设备上测试过了,但世界上有很多不同的操作系统和配置。如果你能在你的机器上尝试一下(尤其是不同的 Linux 发行版或 Windows 版本),并报告结果,那将会非常有帮助。 反馈和建议:您对新功能有什么想法吗?有什么方法可以改进 API 吗?请在 GitHub 上提交一个问题,让我们一起讨论! 贡献:我们始终欢迎拉取请求,无论是针对错误修复、新功能还是文档改进。作者www.mjsyxx.com