Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

maven: what does ` -U,--update-snapshots` really do?

Tags:

In the command line help, I see that maven "checks" for updates:

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

However, most questions on Stack Overflow imply that this option forces Maven to update. Does this mean it forces a re-download of the dependencies?

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

like image 700
imagineerThat Avatar asked Mar 12 '15 21:03

imagineerThat


1 Answers

If you do not use -U, maven might cache results - even if a dependency could not be found previously (e.g. because your nexus [or alike] was unavailable, misconfigured, didn't contain the dependency [yet] or whatever). SNAPSHOT versioned jars are cached similarly.

If that's the case. Maven follows the repository's updatePolicy, which tells it how often (if ever) maven checks if a dependency has been updated (in the case of SNAPSHOT), or has become available, in the case of a released version. Default is daily therefore if a temp error causes maven to not download a dependency, it might take one day before maven tries again. -U overwrites that and tells it to check now.

-U does not re-download a SNAPSHOT dependency if it has already been downloaded and if the checksum is the same! It only checks for the checksum.

Update: as @Stas pointed out, if the checksum differs, it will re-download and override you local JARs with the ones from the remote repository.

** -U also checks for "updated" release versions if you specify a "version" range etc.

BTW: Maven uses a timestamp file that has the same name as the dependency + ".lastUpdated" to know when a dependency has been last checked on which server. E.g. ~/.m2/repository/org/springframework/spring-webmvc/3.1.2.RELEASE/spring-webmvc-3.1.2.RELEASE.jar.lastUpdated

Example for updatePolicy:

<repositories>   <repository>     <releases>       <enabled>false</enabled>       <updatePolicy>always</updatePolicy>     </releases>     <snapshots>       <enabled>true</enabled>       <updatePolicy>never</updatePolicy>     </snapshots>     <!-- ... -->   </repository>   <!-- ... --> </repositories> 

See http://maven.apache.org/pom.html#Repositories for further information about the updatePolicy.

like image 134
Alexander Avatar answered Oct 22 '22 06:10

Alexander