我可以将 Node.js 应用程序打包为 Java EAR

Can I package a Node.js App as a Java EAR

假设您的公司要求开发一个实时聊天应用程序并希望它在数小时内完成。由于您已经知道 Node.js 非常简单,您在 Node.js 开发了它,但公司使用 Java 应用程序服务器(如 WebSphere、JBoss 或 WebLogic)。

因此服务器管理员希望部署 .EAR 文件。

有什么方法可以提供一个 .EAR 文件来运行你的 Node.js 应用程序吗?

没有

您无法将 "pre-installed" nodeJS 正确打包到耳朵中。

Windows 和 Linux 之间的 NodeJS 安装不同; EAR 将无法携带。

附带一提,如果服务器管理员了解到您打包的可执行文件并不意味着 运行 在 JVM 上,在 EAR 中,我不想站在您的立场上。

(注意 1:正如@mlan 在上面的评论中指出的那样,不可能在 JVM 和 nodejs 进程之间共享端口 - 假装它需要一个前端反向代理调度 HTTP 请求,假设所有流量都是 HTTP)

(注意 2:不要误会我的意思,您可以将任何内容放入 EAR,包括您使用 ProcessBuilder 从 Java 触发的可执行文件,但这是最后的解决方法)

这太脏了,对已发布的 EAR 进行任何理智的检查都会当场杀死你。话虽这么说,是的,这是可能的。你得先了解一些东西。

  1. 目标 JVM 是否对 运行 进程有足够的特权,或者执行权限的安全性是否足够松散,使 JVM 能够通过使用 [=43] 来执行 shell 进程=] 方法。 (我说的是 Java 安全性,而不是 OS 安全性)

  2. 您必须直接知道 OS 耳朵容器 运行 的类型。

  3. EAR/WAR 必须 "expanded" 到 OS 已知的真实文件系统。

  4. 你必须知道ear容器的凭证是否有足够的权限来执行OS命令。

一旦你确切地知道了这四点,使用进程 java API 来执行一个 Node.js 可执行文件(静态链接和 OS 兼容)很方便到已知位置...

即使正如 B运行o Grieder 所说,共享端口是不可能的,因此您只需让 Web 应用程序充当 "real" 应用程序 运行 的前端代理在 Node.js 上,HTTP 或 HTTPS 根本不相关,因为 Web 应用程序容器和 Web 应用程序本身之间的最终通信不再加密。

哇哇...好可爱...:) 但是,你要知道,在公司环境中使用这种偷偷摸摸的方法,可不是什么好事。