web-dev-qa-db-ja.com

Gradleで推移的= trueとは正確に何ですか(w.r.t. crashlytics)?

Gradle transitive = trueは正確に何をしますか? Gradle documentation からは明らかではありません。これは、build.gradle内のcompileのコンテキストです。私の場合、Androidのcrashlyticsに依存しています。

compile('com.crashlytics.sdk.Android:crashlytics:[email protected]') {
    transitive = true;
}

いくつかのGradleドキュメント( here および here )は、「推移的な」デフォルトがtrueであることを意味します。ただし、transitive = trueを削除すると、推移的な依存関係は取り込まれません(特にKitGroup)。

class file for io.fabric.sdk.Android.KitGroup not found

ドキュメントによると、デフォルトはtrueですが、実際の動作は反対のようです。

Gradle 2.2.1を実行しています。おそらく2.2と2.4の間で動作が変更されましたか?

Edit:関連 gradleを使用したaarライブラリの推移的な依存関係は解決されませんでした

150
Steve Kuo

@aar表記を使用しています。
これは、aarアーティファクトのみをダウンロードし、依存関係はダウンロードしないことを意味します。
ドキュメント のこの部分を確認できます。
1.4.1.2. Artifact only notationセクションを確認します。

アーティファクトのみの表記法は、指定された拡張子を持つアーティファクトファイルのみをダウンロードするモジュール依存関係を作成します。 既存のモジュール記述子は無視されます

依存関係をダウンロードする場合は、@aar表記を使用して、transitive=trueを追加する必要があります。

@aarを省略すると、推移的な属性を追加せずに動作するはずです。

122

より一般的な注意:crashlyticsライブラリにtransitive = falseを設定すると、gradleはcrashlytics(= "一時ライブラリ")で必要なすべてのライブラリを無視し、それらをダウンロードおよびリンクしません。

必要なライブラリをプロジェクトに手動で追加するか、他の依存関係によって追加された他の一時ライブラリに依存する必要があります。

Gradleのデフォルトはtransitive = trueです。

ここでの例と完全な説明: http://www.devsbedevin.com/Android-understanding-gradle-dependencies-and-resolving-conflicts/

5
Vaiden

私の推測では、参照しているCrashlyticsアーティファクトは依存関係をnot推移的(transitive=false)として手動で指定しているので、それらを強制することはありませんデフォルトで依存関係。そのため、反対の動作が見られます。たとえば、一部のデベロッパーは、Google Play開発者サービスやCrashlyticsが存在する場合に使用する他のすべてを取り込むことを望まない場合があります。

したがって、それを削除すると、Gradleは依存関係を取得しなくなり、ビルドに失敗します。必要に応じて、その依存関係を手動で指定できます。

それは言われている-目の前の大きな問題は、Crashlyticsアーティファクトを直接参照するべきではないことだと思う-Fabricを使用し、プルする必要がある結果としてCrashlyticsで: https://dev.Twitter.com/fabric/Android/integrating

5
Sam Dozor

この依存関係を、推移的な依存関係を含めて、または除外して解決するかどうかを設定します。この依存関係に属するアーティファクトは、他のアーティファクトに依存している可能性があります。後者は推移的な依存関係と呼ばれます。

1
user6703435

Gradleは、デフォルトで推移的な依存関係に従います。特定のライブラリでそれをオフにしたい場合は、推移的フラグを使用します。

推移的フラグの値をfalseに変更すると、推移的依存関係のダウンロードが妨げられるため、必要なものをすべて追加する必要があります。追加の依存関係のないモジュールjarのみが必要な場合は、それも指定できます。

1
Hongyuan

デフォルトでは、Gradle依存関係はtransitivetransitive = true)です。推移的な依存関係については、Mavenリポジトリで詳しく説明しています。 1つのモジュールは他のモジュールに依存する場合があり、Gradleは宣言された依存関係をリポジトリに対して解決するときに、それらの依存関係を検出できます。これはほとんどの場合非常に時間の節約になりますが、時には問題を引き起こす可能性があります。

モジュールAのバージョン1とモジュールBのバージョン2に依存しており、モジュールAがモジュールBのバージョン3に推移的に依存している場合、Gradleにその最終的な依存関係を解決させたくない場合があります。 JARファイルのバージョンが間違っていると、コンパイルまたはランタイムクラスパスに組み込まれる可能性があり、ほとんどのJava開発者はイライラする経験を知っています。

幸いなことに、推移的な依存関係の解決は、それを無効にすることで変更できます。

transitive = false 

ソースは here です

0
yoAlex5