什么是“pom"在maven中打包?

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

我应该在mvn install之后做什么来部署这个应用程序?我期望能够在某个地方找到war文件,但我猜我在错误的地方或遗漏了一步。

169084 次浏览

pom基本上是一个子模块的容器,每个子模块都由与pom.xml相同目录下的一个子目录表示,并带有pom包装。

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

当然,

$ find . -iname "*.war"

工作同样好;-)。

pom的打包用于聚合其他项目的项目中,以及那些唯一有用的输出是来自某个插件的附加工件的项目中。在你的例子中,我用猜一猜表示你的顶级pom包含<modules>...</modules>来聚合其他目录,实际输出是其他目录(可能是子目录)的结果。如果为此目的合理编码,它将具有war的打包。

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

  • 在项目工作区的目标目录中
  • 此外,你的Maven 2本地存储库在你的盒子上搜索(.m2 /资源库中),你的工件被列在(groupId / artifactId / artifactId-version.packaging)目录下的.m2存储库中
  • 如果你在目录下查找,你会发现打包的扩展文件和pom扩展名(pom扩展名基本上是用来生成这个包的pom.xml)
  • 如果您的maven项目是多模块的,除了顶级项目只有一个pom之外,每个模块都将有两个如上所述的文件

Pom打包只是一个说明主要工件不是war或jar,而是Pom .xml本身的规范。

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

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

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

package -> install -> deploy

http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

如果您正在部署一个pom.xml文件或一个不适合其他打包类型的项目,这是非常有用的。

我们对我们的许多项目使用pom包装,并适当地绑定额外的阶段和目标。

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

prepare-package -> test -> package -> install -> deploy

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

POM(项目对象模型)不过是构建项目的自动化脚本,我们可以用XML编写自动化脚本, 构建脚本文件在不同的自动化工具

中命名不同

比如ANT里的build.xml, MAVEN里的pom.xml

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

如果你想检查什么是pom.xml

我建议在http://maven.apache.org/guides/getting-started/index.html#How_do_I_build_more_than_one_project_at_once处查看经典示例

这里my-webapp是web project,它依赖于my-app project中的代码。因此,要将两个项目捆绑为一个,我们有顶级的pom.xml,它提到了最后要捆绑的项目(根据maven术语,模块)。这种顶级pom.xml可以使用pom打包。

My-webapp可以有war包装,也可以依赖于my-app。My-app可以有罐子包装。

现实生活用例

在一家java含量很高的公司,我们有一个python项目,需要进入一个Nexus工件存储库。Python并没有二进制文件,所以我只是想把Python文件压缩成。tar或。zip然后推送。该repo已经集成了maven,因此我们使用<packaging>pom</packaging>指示符和Maven汇编插件将python项目打包为.zip并上传。

这些步骤在所以文章中概述

“pom”包装只是容器,它包含其他包/模块,如jar、war和ear。

如果你在外部包/容器上执行任何操作,比如MVN清洁编译安装。然后内部包/模块也得到干净的编译安装。

不需要为每个包/模块单独执行操作。

https://maven.apache.org/pom.html

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