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.xmlpom.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步搞定

关于使用命令添加jar进自己的pom文件中-maven项目添加jar包

maven打包问题?

如何配置maven pom文件来解决jar包冲突