该pom.xml
文件是传递依赖项所必需的。传递依赖项是在文件的dependencies
部分(如果有)中定义的依赖项,该.pom
文件可作为已部署工件的一部分。
该.pom
文件本质上是原始pom.xml
文件的副本,重命名以反映库名称(即artifactId-version.jar
,然后artifactId-version.pom
)。
解析依赖项时,maven 还将检查其.pom
文件并因此获取有关其依赖项的信息(然后成为传递依赖项)并为其构建(并获取)所需的依赖关系图(即,为每个依赖项重新迭代相同的过程以及每个声明的依赖项)。
来自官方Maven——依赖机制介绍
通过从指定的远程存储库中读取依赖项的项目文件,可以促进此功能。通常,这些项目的所有依赖项都在您的项目中使用,项目从其父项或从其依赖项等继承的任何依赖项也是如此。
注意:粗体是我的。项目文件通常是文件,一旦相关工件上传到 Maven 存储库(或安装到本地 Maven 缓存中) ,就会pom.xml
重命名为文件。*.pom
使用-DgeneratePom=false
,我们应该因此通过选项传递一个pom.xml
文件pomFile
,否则(设置generatePom
为true
)将自动生成一个新文件
如果没有通过参数提供,则为工件生成最小 POM pomFile
。true
如果本地存储库中还没有现有的 POM,则默认为。
自动生成的.pom
文件几乎是空的(Maven 坐标 (groupId, artifactId, version) 但其中没有dependencies
部分),因此 Maven 会将这个工件视为没有传递依赖关系的库:它找不到任何东西,也无法猜测。
如果实际上不需要传递依赖关系,那仍然可以。否则,在另一个 Maven 项目中使用 is 作为依赖项时会发生编译(或运行时)错误。相反,如果将人工制品部署到构建存储中,则传递依赖项变得不那么重要,并且自动生成的 pom 仍然可以。
从您的评论中:
生成的 pom 和使用从 JAR 中提取的 pom 之间有什么区别吗?
如上所述,自动生成的文件与原始pom.xml
文件之间存在很大差异。但是,只有当目标工件随后将被另一个项目用作 maven 依赖项时,这种差异才很重要。pom.xml
存储在下面的文件META-INF
通常是原始文件的副本。
另外,如果我使用 JAR 中的 pom 将部署文件只从文件中获取工件名称、组 ID 和版本?
是的,按照官方文档的规定:
groupId
:要部署的工件的 GroupId。如果指定,则从 POM 文件中检索。
artifactId
:要部署的工件的 ArtifactId。如果指定,则从 POM 文件中检索。
version
:要部署的工件的版本。如果指定,则从 POM 文件中检索。
并且还指定了官方的例子
请注意,groupId、artifactId、版本和打包信息是从给定的 pom 中自动检索的。