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

我被给了一个maven项目来编译和部署在tomcat服务器上。 今天之前我从来没有用过maven,但是我一直在用googlesearch。 看来这个项目中的顶级pom.xml文件的打包types设置为pom

mvn install后我应该做些什么来部署这个应用程序? 我期待着能够在某处或某处findwar档案,但我想我正在寻找错误的地方或错过了一步。

pom基本上是一个子模块的容器,每个子模块都由与pom包装在一起的pom.xml中的一个子目录表示。

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

当然:

 $ find . -iname "*.war" 

工作同样好;-)。

Pom包装只是一个规范,说明主神器不是战争或jar,而是pom.xml本身。

通常将其与通常包含在相关项目的子目录中的“模块”结合使用; 然而,它也可以用于某些情况下,没有主二进制是要build立的,所有其他重要的工件已被宣布为二级文物

考虑一个“文档”项目,主要的工件可能是一个PDF,但它已经build立,并且将其声明为次要工件的工作可能需要在configuration上告诉maven如何构build一个不需要的PDF编译。

pom封装用于聚合其他项目的项目中,而在只有有用的输出是来自某个插件的附属工件的项目中使用。 在你的情况下,我想你的顶级POM包含<modules>...</modules>来聚合其他目录,而实际的输出是其他目录(可能是子目录)的结果。 如果为了这个目的而明智地加以编码,就会有war的包装。

要简单地回答你的问题,当你做一个mvn:安装时 ,maven将创build一个打包的工件基于( 包装属性在pom.xml),运行你的Maven安装后,你可以find.package扩展名的文件

  • 在项目工作区的目标目录中
  • 另外,当您的maven 2本地资源库在您的盒子上search( .m2 / respository )时,您的工件在( groupId / artifactId / artifactId-version.packaging )目录下的.m2资源库中列出
  • 如果你在目录下看,你会发现打包的扩展文件和POM扩展名(POM扩展名基本上是用来生成这个包的pom.xml)
  • 如果你的maven项目是多模块的,每个模块将有两个文件,除了顶层项目,只有一个pom

将工件封装成POM意味着它具有非常简单的生命周期

 package -> install -> deploy 

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

如果您正在部署pom.xml文件或与其他打包types不匹配的项目,这非常有用。

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

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

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

当你mvn安装应用程序时,应该把它添加到你的本地.m2版本库。 要在其他地方发布,您需要设置正确的分配pipe理信息。 如果工件未被Maven自动附加,您可能还需要使用Maven Builder Builder帮手插件。

我build议看到经典的例子: 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包装。

我的webapp可以有战争包装,并可以依赖我的应用程序。 我的应用程序可以有jar包装。

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

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

MAVEN可以把jar子,战争,耳朵和POM包装给我们所有人

如果你想检查什么是POM.XML