What exactly is a Maven Snapshot and why do we need it?
我对Maven快照的含义以及为什么我们要构建一个有点困惑?
A snapshot version in Maven is one that has not been released.
The idea is that before a 1.0
release (or any other release) is done, there exists a 1.0-SNAPSHOT
. That version is what might become 1.0
. It's basically " 1.0
under development". This might be close to a real 1.0
release, or pretty far (right after the 0.9
release, for example).
The difference between a "real" version and a snapshot version is that snapshots might get updates. That means that downloading 1.0-SNAPSHOT
today might give a different file than downloading it yesterday or tomorrow.
Usually, snapshot dependencies should only exist during development and no released version (ie no non-snapshot) should have a dependency on a snapshot version.
The three others answers provide you a good vision of what a -SNAPSHOT
version is. I just wanted to add some information regarding the behavior of Maven when it finds a SNAPSHOT
dependency.
When you build an application, Maven will search for dependencies in the local repository. If a stable version is not found there, it will search the remote repositories (defined in settings.xml
or pom.xml
) to retrieve this dependency. Then, it will copy it into the local repository, to make it available for the next builds.
For example, a foo-1.0.jar
library is considered as a stable version, and if Maven finds it in the local repository, it will use this one for the current build.
Now, if you need a foo-1.0-SNAPSHOT.jar
library, Maven will know that this version is not stable and is subject to changes. That's why Maven will try to find a newer version in the remote repositories, even if a version of this library is found on the local repository. However, this check is made only once per day. That means that if you have a foo-1.0-20110506.110000-1.jar
(ie this library has been generated on 2011/05/06 at 11:00:00) in your local repository, and if you run the Maven build again the same day, Maven will not check the repositories for a newer version.
Maven provides you a way to can change this update policy in your repository definition:
<repository>
<id>foo-repository</id>
<url>...</url>
<snapshots>
<enabled>true</enabled>
<updatePolicy>XXX</updatePolicy>
</snapshots>
</repository>
where XXX
can be:
SNAPSHOT
version will be handled as the stable libraries. (model of the settings.xml can be found here)
The "SNAPSHOT" term means that the build is a snapshot of your code at a given time.
It usually means that the version is a version still under heavy development.
When it comes time to release your code, you will want to change the version listed in the pom. So instead of having a "SNAPSHOT" you would have something like "1.0".
For some help with versioning, check out the Semantic Versioning specification.
链接地址: http://www.djcxy.com/p/44078.html上一篇: Xerces依赖和JRE