maven deploy-file 的 generatePom 什么时候应该设置为 false?

When should generatePom for maven deploy-file be set to false?

我像这样调用 deploy-file 以将一些 JAR 加载到我的公司存储库中:

mvn org.apache.maven.plugins:maven-deploy-plugin:2.8.2:deploy-file \
  -Dfile=lib/SomeLib.jar \
  -DrepositoryId=mycompany-central \
  -Durl=http://myserver/artifactory/libs-release-local -DgeneratePom=false \
  -DgroupId=com.some.lib \
  -DartifactId=SomeLib \
  -Dversion=1.2.5.3 

我将 generatePom 设置为 false 是因为我想尽可能少地生成或更改。我正在加载的库恰好是使用 maven 构建的,并且还包含 META-INF.

下的 POM

问题:在什么情况下,一般情况下,generatePom应该设置为false?在我的情况下 generatePom 应该设置为 false 吗?

传递依赖项需要 pom.xml 文件。传递依赖项是 dependencies 部分中定义的依赖项,如果有的话,.pom 文件可作为已部署工件的一部分提供。

.pom 文件本质上是原始 pom.xml 文件的副本,重命名以反映库名称(即 artifactId-version.jar,然后是 artifactId-version.pom)。

解决依赖关系时,maven 还将检查其 .pom 文件,并因此获取有关其依赖关系的信息(然后成为传递依赖关系)并为其构建(并获取)所需的依赖关系图(即是,为每个声明的依赖项重复相同的过程)。

来自官方Maven - Introduction to the dependency mechanism

This feature is facilitated by reading the project files of your dependencies from the remote repositories specified. In general, all dependencies of those projects are used in your project, as are any that the project inherits from its parents, or from its dependencies, and so on.

注意:粗体是我的。 项目文件 通常是 pom.xml 文件,在相关工件上传到 Maven 存储库(或安装到本地 Maven 缓存)后重命名为 *.pom 文件。

使用 -DgeneratePom=false,因此我们应该通过 pomFile option, otherwise (setting generatePom to true) a new one would be automatically generated

传递一个 pom.xml 文件

Generate a minimal POM for the artifact if none is supplied via the parameter pomFile. Defaults to true if there is no existing POM in the local repository yet.

自动生成的 .pom 文件几乎是空的(Maven 坐标 (groupId, artifactId, version) 但其中没有 dependencies 部分),因此 Maven 会将此工件视为没有传递的库依赖项:它找不到任何依赖项,也无法猜测。

如果实际上不需要传递依赖项,那还是没问题的。否则,在另一个 Maven 项目中将 is 作为依赖项使用时会发生编译(或运行时)错误。相反,如果将工件部署到构建存储中,那么传递依赖性变得不那么重要,自动生成的 pom 仍然可以。


来自您的评论:

Is there any difference between a generated pom and using the pom extracted from the JAR?

如上所述,自动生成的文件与原始 pom.xml 文件之间存在很大差异。但是这种差异本质上只有在目标工件随后将被另一个项目用作 Maven 依赖项时才重要。存储在 META-INF 下的 pom.xml 文件通常是原始文件的副本。

Also, if I use the pom from the JAR will deploy-file just get the artifact name, groupId, and version from the file?

是,如official documentation所指定:

groupId: GroupId of the artifact to be deployed. Retrieved from POM file if specified. artifactId: ArtifactId of the artifact to be deployed. Retrieved from POM file if specified. version: Version of the artifact to be deployed. Retrieved from POM file if specified.

并且还指定了the official example

Note that the groupId, artifactId, version and packaging informations are automatically retrieved from the given pom.