在 POM 的 Maven 存储库条目中,默认情况下是否启用快照?

rog*_*ack 7 java maven

Maven POM可以定义“存储库”。例如,

  <repositories>
    <repository>
      <id>central</id>
      <name>Central Repository</name>
      <url>https://repo.maven.apache.org/maven2</url>
      <layout>default</layout>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
    </repository>
  </repositories>
Run Code Online (Sandbox Code Playgroud)

如果我不声明<snapshots>或怎么办<releases>?默认值是什么?它们似乎是可选的...

根据Maven 存储库如何工作?

<releases>默认情况下在所有存储库上启用。我认为<snapshots>默认情况下是禁用的?那么上面的片段是多余的吗?

小智 8

TL;DR:是的,如果我们配置了快照,默认情况下会启用<repository>快照pom.xml

如果我们仔细考虑一下,即使我们没有在文件<repository>中指定任何内容pom.xml,Maven 也会从默认存储库下载工件。这是因为默认的“中央”存储库是在Super POM中配置的。

Super POM 页面摘录:

与面向对象编程中的对象继承类似,扩展父 POM 的 POM 会从该父 POM 继承某些值。此外,正如 Java 对象最终继承自 java.lang.Object 一样,所有项目对象模型都继承自基础 Super POM。下面的代码片段是 Maven 3.5.4 的 Super POM。

    <repository>
        <id>central</id>
        <name>Central Repository</name>
        <url>https://repo.maven.apache.org/maven2</url>
        <layout>default</layout>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository> </repositories> ```
Run Code Online (Sandbox Code Playgroud)

由于此配置,snapshot“默认情况下”仅“从中央 Maven 存储库”下载被禁用。

<repository>但如果我们在 our 中指定pom.xml,则默认情况下snapshotsenabledenabled您可以在此处找到默认值true

在此输入图像描述

话虽如此,我建议我们进行设置,以便其他开发人员能够“了解”为什么他们的snapshotJAR 文件没有从Artifactory下载。它提供了更多的清晰度,并且鉴于它除了在代码库中之外没有公开,因此它不会“伤害”任何人。