回答:
Mavenのスナップショットバージョンは、リリースされていないバージョンです。
アイデアは、ということである前に1.0
リリース(または任意の他のリリース)が存在し、実行されます1.0-SNAPSHOT
。そのバージョンが何になる か1.0
です。基本的には「1.0
開発中」です。これは実際のリリースに近い場合もあれば1.0
、かなり離れている場合もあります(0.9
たとえば、リリース直後)。
「実際の」バージョンとスナップショットバージョンの違いは、スナップショットが更新を取得する可能性があることです。つまり、1.0-SNAPSHOT
今日のダウンロードでは、昨日または明日のダウンロードとは異なるファイルが提供される可能性があります。
通常、スナップショットの依存関係は開発中にのみ存在する必要があり、リリースされたバージョン(つまり、非スナップショット)はスナップショットバージョンへの依存関係を持ちません。
1.0-DEVELOPMENT
"または " 1.0-INPROGRESS
"のように呼ぶことができないのですか、なぜ人々は自明ではない用語を使用しなければならないのですか
他の3つの答え-SNAPSHOT
は、バージョンとは何かについての良いビジョンを提供します。MavenがSNAPSHOT
依存関係を見つけたときの動作に関する情報を追加したかっただけです。
アプリケーションをビルドすると、Mavenはローカルリポジトリで依存関係を検索します。そこで安定版が見つからない場合は、リモートリポジトリ(settings.xml
またはで定義pom.xml
)を検索して、この依存関係を取得します。次に、それをローカルリポジトリにコピーして、次のビルドで使用できるようにします。
たとえば、foo-1.0.jar
ライブラリは安定版と見なされ、Mavenがローカルリポジトリでライブラリを見つけた場合、現在のビルドにこのライブラリを使用します。
foo-1.0-SNAPSHOT.jar
ライブラリが必要な場合、Mavenはこのバージョンが安定しておらず、変更される可能性があることを認識します。このため、このライブラリのバージョンがローカルリポジトリで見つかった場合でも、Mavenはリモートリポジトリで新しいバージョンを見つけようとします。ただし、このチェックは1日に1回だけ行われます。つまりfoo-1.0-20110506.110000-1.jar
、ローカルリポジトリに(つまり、このライブラリが2011/05/06の11:00:00に生成されている)場合、同じ日に再度Mavenビルドを実行すると、Maven はリポジトリをチェックしません。新しいバージョン。
Mavenは、リポジトリー定義でこの更新ポリシーを変更する方法を提供します。
<repository>
<id>foo-repository</id>
<url>...</url>
<snapshots>
<enabled>true</enabled>
<updatePolicy>XXX</updatePolicy>
</snapshots>
</repository>
どこにありXXX
ますか:
SNAPSHOT
バージョンは安定したライブラリとして扱われます。(settings.xmlのモデルはここにあります)
SNAPSHOT
:バージョンmvn clean package -U
ごとのようにMavenのチュートリアル
-U
フラグに注意してください。MNG-4142が原因で、期待どおりに動作しない可能性があります。
mvn install
して、バージョン1.0-SNAPSHOTのjarファイルをローカルリポジトリにインストールしました。翌日、プロジェクトに変更を加えましたが、バージョンは変更しませんでした。実行mvn install
すると、ローカルリポジトリで変更されなかったようです。それは予想される動作ですか?バージョンを再利用して、mvn install
変更後に上書きすることはできますか?
「スナップショット」という用語は、ビルドが特定の時点でのコードのスナップショットであることを意味します。
通常、このバージョンはまだ開発中です。
コードの準備ができてリリースするときは、POMにリストされているバージョンを変更する必要があります。次に、「SNAPSHOT」の代わりに、「1.0」のようなラベルを使用します。
バージョニングのヘルプについては、セマンティックバージョニング仕様を確認してください。
Mavenバージョンには、プロジェクトが現在開発中であることを示す文字列リテラル「SNAPSHOT」を含めることができます。
たとえば、プロジェクトに「1.0-SNAPSHOT」のバージョンがあり、このプロジェクトのアーティファクトをMavenリポジトリにデプロイする場合、11でリリースをデプロイすると、Mavenはこのバージョンを「1.0-20080207-230803-1」に拡張します。 :2008年2月7日UTCの午後8時。つまり、スナップショットを展開するときは、ソフトウェアコンポーネントのリリースを作成するわけではありません。特定の時間にコンポーネントのスナップショットを解放しています。
そのため、主にスナップショットバージョンは、開発中のプロジェクトに使用されます。プロジェクトが開発中のソフトウェアコンポーネントに依存している場合は、スナップショットリリースに依存できます。ビルドを実行すると、Mavenはリポジトリから最新のスナップショットを定期的にダウンロードしようとします。同様に、システムの次のリリースのバージョンが「1.8」になる場合、正式にリリースされるまで、プロジェクトのバージョンは「1.8-SNAPSHOT」になります。
たとえば、次の依存関係では、常にSpringの最新の1.8開発JARがダウンロードされます。
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
<version>1.8-SNAPSHOT”</version>
</dependency>
Mavenリリースプロセスの例
用語について指摘したいのですが。他の回答は、「スナップショット」バージョンがMavenのコンテキストで何であるかについての適切な説明を与えました。しかし、スナップショット以外のバージョンは「リリース」バージョンと呼ばれるべきですか?
「リリース」バージョンのセマンティックバージョニングのアイデアの間には多少の緊張があります。これは、などの修飾子を持たないが、などの修飾子-SNAPSHOT
も持たないバージョンのように思われ-beta.4
ます。Mavenの「リリース」バージョンのアイデア。これにはの欠如のみが含まれているようです-SNAPSHOT
。
言い換えると、「リリース」が「Maven Centralにリリースできる」を意味するのか、「ソフトウェアが最終的にリリースされる」のかという意味のあいまいさがあります。-beta.4
一般にリリースした場合は「リリース」バージョンと見なすことができますが、「最終リリース」ではありません。セマンティックバージョニングでは、のようなもの-beta.4
が「プレリリース」バージョンであることが明確に示されているため、がなくても「リリース」バージョンと呼ばれるのは意味がありません-SNAPSHOT
。実際に-rc.5
は、テストのためにパブリックアクセスを許可している場合でも、実際にはリリース候補であり、実際のリリースではありません。
したがって、Mavenにも関わらず、私の意見では、修飾子がまったくない「リリース」バージョンのみを呼び出す方が適切と思われます-beta.4
。おそらく、Mavenの非スナップショットバージョンのより適切な名前は、「別の回答に触発された」「安定した」バージョンでしょう。したがって、次のようになります。
1.2.3-beta.4-SNAPSHOT
:プレリリースバージョンのスナップショットバージョン。1.2.3-SNAPSHOT
:リリースバージョンのスナップショットバージョン。1.2.3-beta.4
:プレリリース版の安定版。1.2.3
:リリースバージョン(明らかに、安定した非スナップショットバージョンです)。これは、リポジトリのスナップショットのようであり、この場合は有効になっていません。つまり、ここで参照されているリポジトリは安定しており、更新の必要はありません。
<project>
...
<repositories>
<repository>
<id>lds-main</id>
<name>LDS Main Repo</name>
<url>http://code.lds.org/nexus/content/groups/main-repo</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
</project>
別のケースは次のようなものです:
<snapshots>
<enabled>true</enabled>
</snapshots>
つまり、Mavenはこのリポジトリーの更新を探します。タグで更新の間隔を指定することもできます。
通常、Mavenには2種類のビルドがあります1)スナップショットビルド2)リリースビルド
スナップショットビルド:SNAPSHOTは、通常のバージョンとは異なり、現在のデプロイメントコピーを示す特別なバージョンです。mavenはリモートリポジトリ内のすべてのビルドのバージョンをチェックするため、スナップショットビルドは開発ビルドにすぎません。
ビルドのリリース:リリースとは、ビルドのバージョンでSNAPSHOTを削除することを意味します。これらは通常のビルドバージョンです。
単にスナップショットとは、安定していないバージョンであることを意味します。
バージョンに1.0.0のようなスナップショットが含まれている場合-SNAPSHOTは安定したバージョンではなく、依存関係を解決するためにリモートリポジトリを探すことを意味します