什么是maven的“pom”包装?

时间:2011-10-07 19:45:38

标签: java tomcat maven

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

mvn install部署此应用程序之后,我该怎么做?我原本希望能够在某个地方或某个地方找到war文件,但我想我正在寻找错误的地方或错过了一步。

10 个答案:

答案 0 :(得分:129)

pom基本上是子模块的容器,每个子模块由与pom.xml打包在同一目录中的子目录表示,并且pom打包。

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

当然:

$ find . -iname "*.war"

同样有效; - )。

答案 1 :(得分:39)

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

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

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

答案 2 :(得分:21)

pom的打包用于聚合其他项目的项目,以及仅有用输出是来自某个插件的附加工件的项目。在您的情况下,我猜测您的顶级pom包含<modules>...</modules>来聚合其他目录,实际输出是其他(可能是子目录)目录的结果。如果为此目的明智地编码,它将具有war的包装。

答案 3 :(得分:8)

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

  • 在项目工作区的目标目录中
  • 此外 maven 2本地存储库在您的框中搜索( .m2 / respository ),您的工件列在.m2存储库下( groupId / artifactId / artifactId-version.packaging )目录
  • 如果你查看目录,你会发现打包扩展文件和pom扩展名(pom扩展名基本上是用于生成此包的​​pom.xml)
  • 如果你的maven项目是多模块的,那么每个模块都会有两个文件,如上所述,只有顶级项目只有一个pom

答案 4 :(得分:7)

将工件打包为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构建器帮助程序插件。

答案 5 :(得分:3)

我建议在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可以包含war包装,并且可以依赖my-app。我的应用程序可以有jar包装。

答案 6 :(得分:1)

真实用例

在一家Java公司,我们有一个需要进入Nexus工件库的python项目。 Python实际上没有工件,所以只需要.tar或.zip python文件并推送。 repo已经有了maven集成,所以我们使用<packaging>pom</packaging>指示符和maven assembly plugin将python项目打包为.zip并上传它。

SO post

中概述了这些步骤

答案 7 :(得分:1)

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

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

答案 8 :(得分:0)

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

像我们在MAT中的ANT,pom.xml中调用build.xml一样

MAVEN可以将罐子,战争,耳朵和POM打包给我们所有人新的东西

如果你想检查WHAT IS POM.XML

答案 9 :(得分:0)

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

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

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