Geçişte transitive = true ne yapar (wrt crashlytics)?


174

Gradle transitive = truetam olarak ne yapar ? Gradle belgelerinde açık değildir . Bu bağlamındadır compileiçinde build.gradle. Benim durumumda Android'in çarpışmalarına bağlıyım.

compile('com.crashlytics.sdk.android:crashlytics:2.2.2@aar') {
    transitive = true;
}

Birkaç Gradle dokümanı ( burada ve burada ) "geçişli" varsayılanın doğru olduğunu ima eder. Yine de, transitive = truesonuçta geçici bağımlılıkların getirilmemesi (özellikle KitGroup).

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

Dokümanlar varsayılan olarak true değerini söylüyor, ancak gerçek davranış bunun tam tersi gibi görünüyor.

Gradle 2.2.1 kullanıyorum. Belki de davranış 2.2 ile 2.4 arasında değişti?

Düzenleme : İlgili geçişli bağımlılıklar sınıf kullanarak aar kitaplığı için çözülmedi


yapılandırmaları tanımlarken veya bağımlılıkları tanımlarken?
dnault

Jar dosyalarının bağımlılıkları alt projelere yükseltilir. Her projenin bağımlılıklarını açıkça tanımlaması gerekmez.
Konrad

Bu dokümanda tam olarak ne bilinmemektedir ?
Oleg Estekhin

3
@OlegEstekhin belgeleri gördüğüm çalışma zamanı davranışı ile eşleşmiyor
Steve Kuo

Yanıtlar:


153

@aarGösterimi kullanıyorsunuz .
Bu sadece aar artefaktını indirmek istediğiniz anlamına gelir ve bağımlılık yoktur. Belgelerin
bu bölümünü kontrol edebilirsiniz : Bölümü kontrol edin :
1.4.1.2. Artifact only notation

Yalnızca yapay nesne gösterimi, yalnızca belirtilen uzantıya sahip yapay nesne dosyasını indiren bir modül bağımlılığı oluşturur. Mevcut modül tanımlayıcıları yoksayılır .

@aarBağımlılıkları indirmek istiyorsanız gösterimi kullanarak eklemeniz gerekir transitive=true.

@Aarting'i atlamanın geçiş niteliğini eklemeden çalışması gerektiğini umuyorum.


7
@Aar parametresini atlamanın ve geçiş niteliğini kaldırmanın işe yaradığını doğruladım. Buradaki amaç, geliştiricilerin Kumaş kitlerine açıkça referans vermesidir (örneğin, "derlemek 'com.crashlytics.sdk.android:crashlytics:2.5.5'") ve io.fabric.sdk.android sınıflarının çekirdeğinin geçişli bağımlılık. Transitive = false değerini ayarlarsanız, derleme zamanında io.fabric.sdk.android.Fabric sınıfı bulunmaz.
Mark McClelland

7
Bu "özellik" çok kötü, bağımlılıkları ile bir aar istiyorum. @aar olmadan kavanoz arar ve şikayet eder
dowi

12

Daha genel bir not: Kitaplık transitive = falseüzerinde ayar yapmak , crashlyticssınıfın crashlytics(= "geçici kitaplıklar") için gerekli olan tüm kitaplıkları yok saymasına ve bunları indirip bağlantılandırmasına neden olur.

Gerekli kitaplıkları projenize el ile eklemeniz veya diğer bağımlılıklar tarafından eklenen diğer geçici kitaplıklara güvenmeniz gerekir.

Gradle için varsayılan değer transitive = true.

Örnekler ve tam açıklama: http://www.devsbedevin.net/android-understanding-gradle- bağımlılıkları-and-resolving-conflicts/


bağlantı çalışmıyor. Korkarım varsayılan olarak doğru değil, çünkü bazı durumlarda özellikle doğru yazıyor
Morozov

@Morozov bağlantısı düzeltildi. GOTCHA için teşekkürler!
Vaiden

5

Benim tahminim tavsiye ettiğiniz hangi Crashlytics eser manuel olarak bağımlılıkları belirtir olmasıdır değil Geçişli ( transitive=falsevarsayılan olarak bu bağımlılıkları getirmek zorunda değildir böylece). Bu yüzden karşıt davranışı görüyorsunuz. Örneğin, bazı geliştiriciler tüm Google Play Hizmetlerini veya varsa Crashlytics'in kullanabileceği her şeyi çekmek istemeyebilir.

Yani, bunu kaldırarak, Gradle artık bağımlılığı çekmez ve inşa edemez. Gerekirse bu bağımlılığı manuel olarak belirtebilirsiniz.

Bununla birlikte , eldeki en büyük sorun, Crashlytics eserlerine doğrudan başvurmamanız gerektiğidir - Kumaş kullanmalı ve sonuç olarak Crashlytics'i çekmelisiniz: https://dev.twitter.com/fabric/ android / entegre


Fabric'e geçiş talimatları, o Fabric "kit" ini
Mark McClelland

Niyet, kitlere doğrudan başvurmanız ve geçişli bağımlılık yoluyla io.fabric.sdk.android sınıflarını çekmeniz gibi görünüyor.
Mark McClelland

1

Geçişli bağımlılıkları da dahil olmak üzere, bu bağımlılığın çözülüp çözülmeyeceğini belirler. Bu bağımlılığa ait eserler, diğer eserlere bağımlı olabilir. İkincisine geçişli bağımlılıklar denir.


1

Gradle varsayılan olarak geçiş bağımlılıklarını takip eder. Belirli bir kütüphane için bunu kapatmak istiyorsanız geçişli bayrağı kullanın.

Geçişli bayrağın değerini false olarak değiştirmek, geçişli bağımlılıkların indirilmesini engeller, bu nedenle kendiniz için gereken her şeyi eklemeniz gerekir. Herhangi bir ek bağımlılık olmadan sadece bir modül kavanozu istiyorsanız, bunu da belirtebilirsiniz.


2
Bu son derece yükselen cevaptaki tavsiyenin ötesine ne değer kattı?
hrbrmstr

-19

transitivegeçişliliği kontrol eder. Gradle normalde geçişsiz varsayılan değerdir (değil). Geçişli ve sınıflandırıcılarla ilgili bir hata var, bkz. Https://issues.gradle.org/browse/GRADLE-3188 .


39
Bence bir hataya dikkat etmeniz adil. Ancak, mülkün açıklamasına yardımcı olmuyor. msgstr "geçişli geçişler kontrol eder. Gradle normalde geçiş değil, varsayılan olarak geçişlidir." Gerçekten mi dostum? ... Gerçekten mi?
w3bshark

4
@ w3bshark Komik olduğunu düşündüm. Deneyimimde "varsayılanı geçiş değil, geçiş yapmadığı zaman" oldukça doğrudur.
Navin

4
@ w3bshark Oyları daha az umursabilirdim. Öğrendiklerimi toplulukla paylaşıyorum.
Steve Kuo
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.