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.
我像这样调用 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
.
问题:在什么情况下,一般情况下,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 totrue
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.