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

时间:2015-03-12 21:39:08

标签: maven

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

-U,--update-snapshots                  Forces a check for updated
                                       releases and snapshots on remote
                                       repositories

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

e.g。 https://stackoverflow.com/a/9697970/1119779

3 个答案:

答案 0 :(得分:9)

如果你不使用-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>

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

答案 1 :(得分:2)

重要的是要添加执行mvn -U覆盖您的本地SNAPSHOT罐子与远程SNAPSHOT罐子。

如果没有-U参数,则不会覆盖本地SNAPSHOTS。

答案 2 :(得分:0)

您何时获得https://repo.spring.io/milestone是 缓存在本地存储库中,直到弹簧里程碑的更新间隔过去或强制执行更新后,解析才会重新尝试

在这种情况下,您必须使用mvn clean package -U