Maven放置在JAR文件中的POM文件有什么意义,它是否被任何东西使用?

2022-09-01 20:58:14

当 Maven 构建 JAR 文件时,它会将模块的 POM 文件放在里面(似乎在目录<groupid>/<artifactid>)。

当我从 Ant 构建一个 JAR 文件以通过 Maven Ant 任务进行部署时,此 POM 文件(JAR 中的那个)的存在是否重要?它似乎不是,但我只是想确保它没有在任何地方使用,并确认它应该在JAR文件中的确切位置。


答案 1

和 文件打包在 JAR 中,以便 Maven 生成的每个工件都是自描述的,并且还允许您在需要时在自己的应用程序中利用元数据。一个简单的用法可能是检索应用程序的版本。pom.xmlpom.properties

也就是说,如果需要,可以通过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

默认值为 true。

这应该可以回答您的问题。


答案 2

JAR内部的pom.xml设计用于以下目的,

  1. 自动依赖项解析。
  2. JAR 的部署。可以自动从JAR中提取pom.xml。
  3. 按存储库进行完整性检查(JAR 与 POM 匹配)。

我不知道这些功能是否在任何地方实现。您当然可以忽略它。


推荐