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

我应该做什么mvn安装后得到这个应用程序部署?我希望能在某个地方找到战争文件或其他东西,但我想我找错了地方或错过了一个步骤。


当前回答

现实生活用例

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

这篇SO文章概述了这些步骤

其他回答

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

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

Pom基本上是一个子模块的容器,每个子模块都由与Pom .xml相同目录下的子目录表示。

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

当然,

$ find . -iname "*.war"

工作同样好;-)。

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

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

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

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

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

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

pom的打包用于聚合其他项目的项目中,以及那些唯一有用的输出是来自某些插件的附加工件的项目中。在您的情况下,我猜您的顶级pom包括<modules>…</modules>聚合其他目录,实际输出是其他目录(可能是子目录)的结果。如果为了这个目的进行合理的编码,它就会有一种战争的包装。