Maven 放在 JAR 文件中的 POM 文件有啥意义,它被任何东西使用吗?
Posted
技术标签:
【中文标题】Maven 放在 JAR 文件中的 POM 文件有啥意义,它被任何东西使用吗?【英文标题】:What is the significance of the POM file that Maven places in a JAR file, is it used by anything?Maven 放在 JAR 文件中的 POM 文件有什么意义,它被任何东西使用吗? 【发布时间】:2010-12-13 06:36:17 【问题描述】:Maven 构建 JAR 文件时,会将模块的 POM 文件放入其中(貌似在目录
当我从 Ant 构建一个 JAR 文件以通过 Maven Ant 任务部署时,这个 POM 文件(JAR 中的那个)的存在是否重要?似乎没有,但我只是想确保它没有在任何地方使用,并确认它应该在 JAR 文件中的确切位置。
【问题讨论】:
【参考方案1】:pom.xml
和 pom.properties
文件打包在 JAR 中,这样 Maven 生成的每个工件都是自描述的,并且还允许您在需要时在自己的应用程序中使用元数据。一种简单的用途可能是检索应用程序的版本。
也就是说,如果需要,可以通过 MavenArchiverConfiguration 停用这些文件的包含,它承认布尔值 addMavenDescriptor 参数并且不包含它们是安全的(即使我觉得拥有它们很好)。例如对于 JAR:
<project>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<addMavenDescriptor>false</addMavenDescriptor>
</archive>
</configuration>
</plugin>
</plugins>
...
</build>
...
</project>
关于这些文件的位置,addMavenDescriptor 的文档说:
生成的存档是否会包含这两个 Maven 文件:
pom 文件,位于META-INF/maven/$groupId/$artifactId/pom.xml
的存档中 一个pom.properties
文件,位于META-INF/maven/$groupId/$artifactId/pom.properties
的存档中默认值为真。
这应该可以回答您的问题。
【讨论】:
"pom.xml 和 pom.properties 文件打包在 JAR 中,因此 Maven 生成的每个工件都是自描述的,并且还允许您在自己的应用程序中使用元数据,如果需要出现” - 你能举例说明为什么我的应用程序需要 pom 文件中的元数据吗? 例如,当您不想将 jar 发布到在线 mvn repo 时,您可以将 jar 文件单独提供给其他人,他们可以使用 mvn-install 安装到本地 mvn repo -plugin:3.0.0-M1 并使用它。 maven 会知道这个本地安装的 jar 的正确依赖关系,如果没有 pom.xml,这是不可能的。【参考方案2】:JAR 中的 pom.xml 是为以下目的而设计的,
-
自动依赖关系解析。
部署 JAR。可以自动从 JAR 中提取 pom.xml。
存储库的完整性检查(JAR 匹配 POM)。
我不知道是否在任何地方都实现了这些功能。你可以忽略它。
【讨论】:
以上是关于Maven 放在 JAR 文件中的 POM 文件有啥意义,它被任何东西使用吗?的主要内容,如果未能解决你的问题,请参考以下文章
idea中为啥配置了maven还需要额外的jar包必须放在web-inf的lib中吗
为什么我需要在jar文件中查找未包含在maven pom.xml文件中的类?
springboot maven项目中,pom文件引入自定义jar包,例如百度sdk,2步搞定