maven:`-U, - update-snapshots`真的有用吗?

ima*_*hat 11 maven

在命令行帮助中,我看到maven"检查"更新:

-U,--update-snapshots                  Forces a check for updated
                                       releases and snapshots on remote
                                       repositories
Run Code Online (Sandbox Code Playgroud)

但是,Stack Overflow上的大多数问题都意味着此选项会强制Maven更新.这是否意味着它强制重新下载依赖项?

例如/sf/answers/678857931/

Ale*_*der 11

如果你不使用-U,maven可能会缓存结果 - 即使找不到依赖项(例如,因为你的nexus [或类似]不可用,配置错误,不包含依赖[尚未]或其他).

如果是这样的话.Maven遵循存储库updatePolicy,告诉它maven检查依赖关系是否经常更新的频率(如果有的话).daily因此,如果临时错误导致maven没有下载依赖项,则默认值可能需要在maven再次尝试之前一天.-U覆盖并告诉它现在检查.

-U如果已经下载并且校验和相同,则不会重新下载依赖项!它只检查校验和.

更新:正如@Stas指出的那样,如果校验和不同,它将重新下载并使用远程存储库中的JAR 重写本地JAR.

BTW:Maven使用与依赖项+同名的时间戳文件,".lastUpdated"以了解上次在哪个服务器上检查依赖项.例如~/.m2/repository/org/springframework/spring-webmvc/3.1.2.RELEASE/spring-webmvc-3.1.2.RELEASE.jar.lastUpdated

updatePolicy示例:

<repositories>
  <repository>
    <releases>
      <enabled>false</enabled>
      <updatePolicy>always</updatePolicy>
    </releases>
    <snapshots>
      <enabled>true</enabled>
      <updatePolicy>never</updatePolicy>
    </snapshots>
    <!-- ... -->
  </repository>
  <!-- ... -->
</repositories>
Run Code Online (Sandbox Code Playgroud)

有关updatePolicy的详细信息,请参阅http://maven.apache.org/pom.html#Repositories.

  • 它不会更新您的整个本地 m2 存储库,但会强制检查您的项目使用的那些 Maven 依赖项是否有任何更新。顺便说一句:这应该只适用于 SNAPSHOT 依赖项——发布的 maven 工件在发布后不应更改! (3认同)

Joh*_*nny 5

添加执行mvn -U将使用远程 SNAPSHOT jar覆盖本地 SNAPSHOT jar很重要。

没有-U参数,本地快照不会被覆盖。

  • 这是不正确的!正如已接受的答案中已经提到的,“-U”将更新它们,但当时更新策略设置正在指定此类更新。为了防止本地快照工件被远程快照覆盖,您必须指定 -o 以根本不下载任何内容。 (2认同)