Maven中的“ pom”包装是什么?


175

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

mvn install部署此应用程序后我应该怎么做?我原本希望能够在war某处或某处找到文件,但是我想我在错误的位置查找或缺少一步。


3
MVN安装-这是用于在你的本地库安装你的神器(JAR,WAR,EAR)(它通常会在〜/ .m2目录/库direcotry)
卢卡斯Siwiński

Answers:


148

pom基本上是子模块的容器,每个子模块由pom.xmlpom包装相同的目录中的子目录表示。

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

当然:

$ find . -iname "*.war"

同样有效;-)。


45

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

通常,它与通常包含在所讨论项目的子目录中的“模块”结合使用。但是,它也可以在某些情况下使用,即不打算构建主二进制文件,而所有其他重要工件都已声明为辅助工件。

考虑一个“文档”项目,主要工件可能是PDF,但是它已经构建,并且可能需要在配置上进行将其声明为辅助工件的工作,以告诉maven如何构建不需要的PDF编译。


我可以在类似的行中想到的其他示例为pom project ==>抽象类和其中的模块==>具体类。
bharatj

22

的打包pom用于汇总其他项目的项目中,以及仅有用输出是某些插件附带的工件的项目中。在你的情况,我会你的顶层POM包括<modules>...</modules>聚合其他目录,而实际输出是其他(可能是子)目录之一的结果。如果为此目的进行了合理的编码,它将带有的包装war


1
“仅有用的输出是来自某个插件的附加工件”的意思是什么?
omjego

9

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

  • 在项目工作区的目标目录中
  • 同样,在您的Maven 2本地存储库上的框上搜索(.m2 / respository)的地方,您的工件在.m2存储库中的(groupId / artifactId / artifactId-version.packaging)目录下列出。
  • 如果在目录下查找,则会找到打包的扩展文件以及pom扩展名(pom扩展名基本上是用于生成此程序包的pom.xml)
  • 如果您的Maven项目是多模块的,则每个模块将如上所述处理两个文件,但顶级项目仅包含pom

8

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

package -> install -> deploy

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

如果您要部署pom.xml文件或与其他包装类型不匹配的项目,这将非常有用。

我们将pom打包用于许多项目,并视情况绑定额外的阶段和目标。

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

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

当您mvn安装该应用程序时,应将其添加到本地.m2存储库中。要在其他地方发布,您将需要设置正确的发行管理信息。如果Maven不会自动附加工件,那么您可能还需要使用Maven Builder帮助程序插件。


5

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

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

my-webapp可以具有战争包装,并且可以依赖my-app。my-app可以使用jar包装。


2

现实生活中的用例

在一家Java繁多的公司中,我们有一个python项目,需要进入Nexus工件存储库。Python确实没有工件,因此只需要将.tar或.zip python文件推入即可。该仓库已经与Maven集成,因此我们使用了<packaging>pom</packaging>带有maven程序集插件的指示符将python项目打包为.zip并上传。

SO帖子概述了这些步骤


1

“ pom”包装不过是容器,其中包含其他包装/模块,如jar,war和ear。

如果您对外部包装/容器执行任何操作,例如mvn clean compile install。然后内部软件包/模块也可以进行干净的编译安装。

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


1

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

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


0

POM(Project Object Model)只是用于构建项目的自动化脚本,我们可以用XML编写自动化脚本,构建脚本文件在不同的自动化工具中以不同名称命名

就像我们在ANT中调用build.xml,在MAVEN中调用pom.xml

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

如果要检查什么是POM.XML

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.