【问题标题】:How to know if a .war file is bundled with Maven?如何知道 .war 文件是否与 Maven 捆绑在一起?
【发布时间】:2018-07-12 05:32:50
【问题描述】:

有两个问题:

1) 有没有办法将 Maven 与 .war 文件“捆绑”,即使机器上没有安装 Maven,部署 .war 文件也会启动 Maven?

2) 如果 1) 的答案是肯定的,我如何通过查看 .war 文件的 WEB-INF/lib 知道 .war 是否与 Maven“捆绑”?我应该查找哪些 .jar 文件会告诉我这个 .war 文件是与 Maven“捆绑”的?

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

【问题讨论】:

    标签: maven jar war


    【解决方案1】:

    实际上,仅仅通过部署一个战争,并没有简单的方法来判断 Maven 是否会被安装和运行。这与经典的“停机问题”类似。

    当然,您可以打开战争并查看 WEB-INF/lib 目录是否包含一堆 maven-*.jar 库(其中包括基本的 maven-core-*.jar),但这并不意味着它们一定会结束安装和运行。

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

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

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

    【讨论】:

      【解决方案2】:

      1) 从某种意义上说,有没有办法将 Maven 与 .war 文件“捆绑”在一起 即使机器上没有安装 Maven,部署 .war 文件将启动 Maven?

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

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

      2) ... 我怎么知道通过查看 WEB-INF/lib .war 文件的 .war 是否与 Maven“捆绑”? 我应该寻找哪些 .jar 文件会告诉我这个 .war 文件与 Maven “捆绑”?

      在一场战争中,还有一个罐子和一个耳朵,您应该找到一个包含有关 Java 存档元数据的 META-INF 文件夹。
      在其中你应该找到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 教程。

      【讨论】:

      • 我要求一个可能有点像 IDE 的应用程序,它使用 Maven 来构建在其上开发的其他项目。
      • 有了源码,pom.xml的存在就足以考虑项目是否由maven驱动了。
      • 假设我有一个将用于开发项目的 .war 文件,并且该 war 部署在未安装 Maven 的机器上。这个战争应用程序将使用一些源文件来构建一个 .jar 文件。现在,如果 .war 文件在其 WEB-INF/lib 文件夹中带有一个 maven-core-x.x.x.jar 并假设在使用 war 应用程序创建的项目中有一个 pom.xml 文件。我的问题是,由于.war文件中的maven-core-x.x.x.jar文件,.war文件会不会自己在机器上安装Maven来构建使用war应用开发的项目?
      猜你喜欢
      • 1970-01-01
      • 2016-09-21
      • 2014-11-30
      • 1970-01-01
      • 2011-06-06
      • 1970-01-01
      • 1970-01-01
      • 2013-10-31
      • 1970-01-01
      相关资源
      最近更新 更多