2017-06-13 5 views
0

私は最近、NPM、Yarn、Paket、Cargoなどのパッケージマネージャーについて読んでいるときに、依存関係のバージョンロックファイルという概念を導入しました。私の理解は、すべての直接的および推移的な依存関係をリストするファイルですそれらの正確なバージョン番号は、後続のビルドが同等の依存関係のセットを使用することを保証します。これは、多くのパッケージマネージャーがコンセプトを持っているか、採用しているので、望ましい特徴であると思われます。なぜGradleやMavenに依存バージョンロックファイルがないのですか?

私の質問は、その後、次のとおりです。

  1. はなぜMavenのか、Gradleのロックファイルを使用していませんか?もしそうなら、なぜ私はそれを見たことがありませんか?

  2. パッケージマネージャの依存関係解決戦略のバージョン範囲を許可する賛否両論と正確なバージョンのみを許可する点は何ですか?

+3

あなたのポンポンでバージョンを定義する場合依存関係ツリーは常に同じです。つまり、すべての推移的な依存関係を定義する必要はなく、大量の作業を節約できます。 Mavenでバージョン範囲を使用する場合を除いて(再現不可能なビルドとなる)、他のビルドシステムでも同様です。 – khmarbaise

+0

もしあなたがあなたのコメントを精緻化したり、言い直したりすることができたら、おそらく。人々はそれが有用なコメントだと思っているように思えますが、私の質問にどのように答えているのか分かりません。 – jrahhali

+0

単純な答えは:Maven、Gradleなどです。明示的なファイルとしてではなく、常に同じ方法で反復される依存関係ツリーのアイデアに基づいて実装されています。これは、ツリーが常に同じバージョンを持つことを意味します。すべての推移的および非推移的依存関係をバージョンで定義するためのファイルは必要ありません(BTW:MavenはMaven 1.Xのファイル内のすべてのものを定義するという概念を持っていました)... – khmarbaise

答えて

0

Mavenの、SBTとGradleの両方は、あなたが記述しているものを持っています。これは「リリースされた(または修正された)バージョンの使用」と呼ばれています。リリースされたバージョンは、バージョン範囲[1.2.3,)、またはスナップショット(1.2.3-SNAPSHOT)と比較して1.2.3のように見えます。

すべての依存関係がリリースされたバージョンを使用している場合は、あなたが説明していることを達成します。

バージョン範囲は、ユースケースに応じて有効な形式ですが、親のPOM-sに使用されている場合を除いて、またはアクティブな開発中である場合を除き、通常は対処してください。それぞれの成果物が決してあなたのために物事を壊すことができないと確信しているならば、サードパーティ製の、または親のPOMの固定バージョンを更新し続ける必要がない場合、バージョン範囲は便利です私は、これはバージョン範囲で多く発生します)。コードが最初に考案しテストしたものに対して構築され、機能することを保証したい場合は、固定バージョンを使用する必要があります。

pom.xmlが依存関係のバージョンを厳密に定義している場合は、「ロックファイル」などの機能は必要ありません。

あなたは依存関係の管理に関するドキュメントを読んでいる場合、あなたはこれがそう確かにあることがわかります。

+0

OK、pre-follow-up質問:Maven Central Repository内に存在するパッケージ(またはそれ以外のもの)が、pom.xmlに定義されている*依存関係のバージョン範囲を持つことができますか? – jrahhali

+0

私は100%の確実性で言うことはできませんが、私はそれを仮定しません。これらのリンクをご覧ください:http://central.sonatype.org/pages/releasing-the-deployment.html#releasing-deployment-from-ossrh-to-thecentral-repository-introduction、http:// central .sonatype.org/pages/requirements.htmlおよびhttp://books.sonatype.com/mvnref-book/reference/pom-relationships-sect-project-dependencies.html – carlspring

+2

依存関係のバージョン範囲を持つことは許可されています。 Maven Centralにデプロイされるプロジェクト(jarなど)。しかしこれはメンテナであることを知っておかなければならない点です。これは定義上、あなた自身のビルドとビルドを再現できないようにします...あなたの依存関係などを更新したい場合は、それを処理できるツールがありますバージョン範囲を使用せずに... – khmarbaise

1

なぜMavenのかのGradleこのようなものを使用していませんか?

があります。

もしそうなら、私はそれを見たことがありませんか?

ドキュメントを読んでいないので、

https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html

念のために:https://docs.gradle.org/current/userguide/artifact_dependencies_tutorial.html - khmarbaise

+2

レコード用:https: //docs.gradle.org/current/userguide/artifact_dependencies_tutorial.html – khmarbaise

+0

これは私の質問に全く答えないような気がしますので、明らかに私の質問は十分ではありません。私はあなたが記載した文書を知っています。私の質問は、GradleとMavenが依存関係解決をどのように処理するかに関するものではありません。私の質問は、GradleとMavenがロックファイルを必要としない理由です。 – jrahhali

+0

@jrahhali:* "私の質問は、なぜGradleとMavenがロックファイルを必要としないのかです。" * - ドキュメントに記述されている* dependencyManagement *セクションを持っているからです。 –

関連する問題