Java “什么是”呢;pom“;用maven包装?

Java “什么是”呢;pom“;用maven包装?,java,tomcat,maven,Java,Tomcat,Maven,我得到了一个maven项目来编译并部署到tomcat服务器上。今天之前我从未使用过maven,但我一直在谷歌上搜索。似乎此项目中的顶级pom.xml文件的打包类型设置为pom 在mvn安装之后,我应该做什么才能部署此应用程序?我本来希望能在某处或某处找到一个war文件,但我猜我找错了地方或错过了一个步骤。pom基本上是一个子模块的容器,每个子模块由一个子目录表示,该目录与pom.xml具有pom打包 在某个地方,嵌套在项目结构中,您会发现带有war打包的工件(模块)。Maven通常将所有内容构建

我得到了一个maven项目来编译并部署到tomcat服务器上。今天之前我从未使用过maven,但我一直在谷歌上搜索。似乎此项目中的顶级
pom.xml
文件的打包类型设置为
pom


mvn安装之后,我应该做什么才能部署此应用程序?我本来希望能在某处或某处找到一个
war
文件,但我猜我找错了地方或错过了一个步骤。

pom
基本上是一个子模块的容器,每个子模块由一个子目录表示,该目录与
pom.xml
具有
pom
打包

在某个地方,嵌套在项目结构中,您会发现带有
war
打包的工件(模块)。Maven通常将所有内容构建到每个模块的
/target
子目录中。因此,在
mvn安装后
查看带有
war
打包的模块中的
target
子目录

当然:

$ find . -iname "*.war"

同样有效;-)

pom
打包用于聚合其他项目的项目,以及唯一有用的输出是某个插件附加工件的项目。在您的情况下,我猜测您的顶级pom包含聚合其他目录的
,实际输出是其他目录之一(可能是子目录)的结果。如果为此目的进行合理的编码,它将有一个
war

的包。为了简单地回答您的问题,当您执行一个测试时,maven将基于(packaging属性在pom.xml中)创建一个打包的工件,在您运行maven安装后,您可以找到扩展名为.package的文件

  • 在项目工作区的目标目录中
  • 另外,当您的maven 2本地存储库在您的框中搜索(.m2/respository)时,您的工件将列在(groupId/artifactId/artifactId version.packaging)目录下的.m2存储库中
  • 如果您在目录下查找,您将发现打包的扩展文件和pom扩展(pom扩展基本上是用于生成此包的pom.xml)
  • 如果您的maven项目是多模块的,则每个模块将包含两个如上所述的文件,但顶层项目只有一个pom

    • pom打包只是一个规范,说明主要工件不是战争或罐子,而是pom.xml本身

      它通常与“模块”一起使用,这些模块通常包含在相关项目的子目录中;然而,它也可以在某些场景中使用,在这些场景中,不需要构建主要二进制文件,所有其他重要的工件都被声明为次要工件


      设想一个“文档”项目,主要工件可能是PDF,但它已经构建好了,在配置过程中可能需要将其声明为次要工件,以告诉maven如何构建一个不需要编译的PDF。

      将工件打包为POM意味着它有一个非常简单的生命周期

      package -> install -> deploy
      

      如果要部署pom.xml文件或不适合其他打包类型的项目,这将非常有用

      我们在许多项目中使用pom包装,并根据需要绑定额外的阶段和目标

      例如,我们的一些应用程序使用:

      prepare-package -> test -> package -> install -> deploy
      
      当您安装mvn应用程序时,它应该将其添加到本地.m2存储库中。要在别处发布,您需要设置正确的分发管理信息。如果maven没有自动附加工件,您可能还需要使用maven builder helper插件。

      POM(项目对象模型)只是用于构建项目的自动化脚本,我们可以用XML编写自动化脚本, 建筑脚本文件在不同的自动化工具中以不同的方式命名

      就像我们在ANT中称build.xml,在MAVEN中称pom.xml一样

      MAVEN可以包装罐子、战争、耳朵和POM,这对我们所有人来说都是新事物


      如果您想查看

      我建议在以下位置查看经典示例:

      这里我的webapp是web项目,这取决于我的app项目中的代码。因此,为了将两个项目捆绑在一起,我们有顶级pom.xml,其中提到了最终要捆绑的项目(根据maven术语的模块)。这样的顶级pom.xml可以使用pom打包


      我的webapp可以具有war打包,并且可以依赖于我的应用。我的应用程序可以使用jar包装。

      现实生活中的用例

      在一家重Java的公司,我们有一个python项目,需要进入Nexus工件库。Python并没有真正的二进制文件,所以只想使用.tar或.zip压缩Python文件并推送。repo已经有了maven集成,所以我们使用了
      pom
      指示器,将python项目打包为
      .zip
      ,并上传它


      这些步骤在本节中进行了概述,“pom”包装只是容器,其中包含其他包/模块,如jar、war和ear

      如果您在外部包/容器上执行任何操作,如mvn clean compile install。然后,内部包/模块也会得到干净的编译安装

      无需对每个包/模块执行单独的操作。


      对于父项目和聚合(多模块)项目,包装类型必须为pom。这些类型定义了绑定到一组生命周期阶段的目标。例如,如果打包是jar,那么打包阶段将执行jar:jar目标。如果包装是pom,那么执行的目标将是site:attach descriptor

      mvn install-这用于在本地存储库(通常是~/.m2/repository direcotry)中安装您的工件(jar、war、ear)其他示例,我可以在类似的行中将其看作是pom项目==>其中的抽象类和模块