如何知道 .war 文件是否与 Maven 捆绑在一起?

How to know if a .war file is bundled with Maven?

有两个问题:

1) 有没有办法使用 .war 文件 "bundle" Maven,即使机器上没有安装 Maven,部署 .war文件将启动 Maven?

2) 如果 1) 的答案是肯定的,我如何通过查看 .war 文件的 WEB-INF/lib 知道 .war 是否是 "bundled" 是否使用 Maven?我应该寻找哪些 .jar 文件会告诉我这个 .war 文件 "bundled" 随 Maven 一起提供?

我尝试用谷歌搜索这个,我发现的只是 使用 Maven 将其他库捆绑到我的 .jar 文件中的方法,这确实不回答我的问题。

1) Is there a way to "bundle" Maven with a .war file, in the sense that even if Maven is not installed on the machine, deploying the .war file will start Maven?

war 文件是 Web 应用程序存档。
它包含一个旨在部署在 Servlet 容器上的 Web 应用程序。
在 Maven 中添加一个独立的应用程序确实是违反直觉的。

此外,部署 war 和启动 Maven 并不是传统上耦合的任务。您使用 Maven 构建 WAR,但不使用 Maven 运行 构建 war。你 运行 它在服务器上。

2) ... how do I know by looking at WEB-INF/lib of the .war file whether that .war is "bundled" with Maven or not? Which .jar files should I look for that will tell me that this .war file comes "bundled" with Maven?

在 war 以及一个罐子和一个耳朵中,您应该找到一个 META-INF 文件夹,其中包含有关 Java 存档的元数据。
在其中你应该找到 MANIFEST.MF 文件,其中包含 Created-By 属性.

的多个信息

对于 Maven 3 构建,如果构建是使用 Maven 执行的,您应该找到对 Maven 的引用。
例如,对于使用 Maven 3.3.9 创建的存档,您将拥有:

Created-By: Apache Maven 3.3.9

要获得有关 MANIFEST.MF 的更多信息,我建议您阅读 Oracle 文档的 Working with Manifest Files: The Basics 教程。

实际上,没有简单的方法可以通过部署 war 来判断是否会安装 Maven 和 运行。这与经典案例 "Halt Problem".

相似

当然,你可以打开war,看看WEB-INF/lib目录是否包含一堆maven-*.jar库(突出其中的基本maven-core-*.jar),但这并不一定意味着它们将结束安装并且 运行.

此外,在 war 中找不到任何这些库也不意味着 Maven 没有捆绑到其中,因为它可以被压缩到一个名为 XXX-YYY 的文件中,然后压缩为静态资源打成jar,然后再压缩成war。而且,如果您正在调查 IDE 包装,恐怕这很有可能。

war 甚至可以在 运行 时从更新站点(Maven 主页本身)下载 Maven。

根据停止问题的结论,检查 Maven 是否捆绑到 war 中的唯一可靠方法是部署它并观察其在 运行 之后的行为。