Gradle dependency bulunamadı hatasını çözmenin en güvenli yolu, rastgele repository eklemek veya cache klasörünü hemen silmek değildir. Önce hata mesajındaki dependency koordinatını ve build yapılandırmasını doğrulamak; ardından repository tanımını, repository erişimini ve ağ koşullarını incelemek gerekir. Son aşamada cache davranışı ile Java sürüm uyumluluğu kontrol edilmelidir.
Bu sırayı dört eksenli bir teşhis çerçevesi olarak düşünebilirsiniz: yapılandırma, erişim, cache ve Java uyumluluğu. “Could not find”, “failed to resolve” veya benzer ifadeler tek başına kesin bir kök neden göstermez. Aynı üst seviye hata, yanlış yazılmış bir dependency koordinatından proxy engeline kadar farklı nedenlerle oluşabilir.
Gradle Dependency Hatasını Çözmenin Doğru Sırası Nedir?
Gradle dependency hatalarında en verimli teşhis sırası, hatayı en ucuz ve en kolay doğrulanabilir ihtimalden başlayarak elemekle kurulur. İlk adımda dosya ve dependency tanımı incelenir; repository'nin gerçekten doğru kapsamda tanımlanıp tanımlanmadığı kontrol edilir. Daha sonra Gradle'ın ilgili kaynağa erişip erişemediği, yerel cache'in çözümlemeyi etkileyip etkilemediği ve kullanılan Java ortamının proje ile uyumlu olup olmadığı değerlendirilir.
- Yapılandırmayı doğrulayın: Doğru Gradle dosyasını, doğru DSL biçimini ve doğru configuration adını kullandığınızdan emin olun.
- Dependency koordinatını kontrol edin: Group, artifact ve version bölümlerini karakter karakter karşılaştırın.
- Repository ve erişimi inceleyin: Dependency'nin arandığı repository tanımlı mı, ağ üzerinden erişilebilir mi, proxy veya kimlik doğrulama gerekiyor mu bakın.
- Cache davranışını test edin: Normal çözümleme ile offline çözümlemeyi karşılaştırın; gerektiğinde dependency metadata'sını yenileyin.
- Java uyumluluğunu kontrol edin: Gradle'ın çalıştığı JVM, projenin toolchain ayarı ve dependency'nin bytecode gereksinimi birbiriyle uyumlu mu inceleyin.
İlk aşamada amaç çözüm üretmekten çok hatanın hangi katmanda oluştuğunu daraltmaktır. Örneğin `implementation` satırında sözdizimi hatası varsa repository eklemek sorunu çözmez. Aynı şekilde dependency adı doğru olsa bile yalnızca plugin repository'si tanımlıysa uygulamanın normal dependency çözümlemesi başarısız olabilir. Gradle, proje dependency'leri için build yapılandırmasında veya merkezi dependency çözümleme ayarlarında tanımlanan repository'leri kullanır; plugin çözümlemesi ise ayrı bir repository grubundan yürütülür. ([docs.gradle.org](https://docs.gradle.org/current/userguide/dependency_management_basics.html?utm_source=openai))
1. Önce hata metnini ve kullanılan dosyayı sabitleyin
Teşhise başlamadan önce hatanın hangi görev sırasında çıktığını belirleyin. `compileJava`, `test`, `runtimeClasspath` veya bir plugin çözümleme aşaması farklı configuration'lara ve farklı repository kapsamlarına işaret edebilir. Hata mesajını yalnızca son satırdan okumak yerine, başarısız olan modülün tam koordinatını, aranan repository adreslerini ve varsa “Caused by” bölümünü birlikte inceleyin.
İlk kontrol listesi şu sorulardan oluşabilir:
- Hata bir uygulama dependency'si için mi, yoksa Gradle plugin'i için mi oluştu?
- Dependency `implementation`, `testImplementation`, `runtimeOnly` veya başka bir configuration içinde mi tanımlandı?
- Proje `build.gradle` mı, yoksa `build.gradle.kts` mi kullanıyor?
- Repository tanımı proje dosyasında mı, settings dosyasında mı, yoksa yalnızca `pluginManagement` içinde mi bulunuyor?
- Hata tüm dependency'lerde mi, yoksa yalnızca tek bir modülde mi görülüyor?
Bu sorular, “Gradle dependency bulunamadı” ifadesini daha küçük bir probleme dönüştürür. Tek bir modül bulunamıyorsa koordinat veya yayınlama durumu öne çıkar. Birçok farklı dependency aynı anda çözümlenemiyorsa repository erişimi, ağ, proxy veya merkezi repository yönetimi daha güçlü adaylardır.
2. Yapılandırma ve dependency koordinatını repository erişiminden önce kontrol edin
Yanlış girilmiş bir group, artifact veya version değeri, dışarıdan bakıldığında repository erişim hatasına benzeyebilir. Gradle doğru repository'ye ulaşsa bile yanlış koordinat için beklenen metadata'yı bulamaz. Bu nedenle ilk aşamada internet bağlantısını değiştirmek, proxy ayarlamak veya cache silmek yerine dependency satırını doğrulamak daha doğrudur.
Örneğin aşağıdaki iki satır biçim olarak benzer görünür; ancak bir karakterlik fark bile farklı bir modül istenmesine neden olabilir:
implementation("org.example:payment-client:1.4.2")
implementation("org.example:payments-client:1.4.2")
Burada ikinci satırdaki artifact adındaki çoğul eki, Gradle açısından küçük bir yazım farkı değil, tamamen farklı bir dependency koordinatıdır. Benzer şekilde `1.4.2` yerine yanlışlıkla `1.4.20`, `1.4` veya boş bir version kullanılması da çözümleme sonucunu değiştirir. Sürüm numarasını tahmin etmek yerine kütüphanenin kullandığınız yayın kaynağındaki metadata'sını veya proje dokümantasyonunu kontrol edin.
3. Repository tanımını ve erişim koşullarını inceleyin
Dependency koordinatı doğruysa sıradaki soru, Gradle'ın bu modülü arayacağı repository'nin yapılandırmada bulunup bulunmadığıdır. Repository tanımı doğru dosyada yer alsa bile kurum ağı, proxy, TLS sertifikası, kimlik doğrulama veya DNS sorunu nedeniyle erişim başarısız olabilir.
Bu aşamada hata mesajında listelenen repository adreslerini okuyun. Gradle'ın gerçekten beklediğiniz kaynağı denediğini görmüyorsanız sorun çoğunlukla repository kapsamındadır. Beklenen repository listede yer alıyor, fakat bağlantı veya indirme sırasında hata oluşuyorsa ağ katmanına geçebilirsiniz.
--stacktrace seçeneği, özellikle üst seviye “failed to resolve” mesajının altında ağ, kimlik doğrulama veya yapılandırma kaynaklı daha ayrıntılı istisnalar bulunduğunda kullanışlıdır. Gradle belgelerine göre bu seçenek kullanıcı istisnaları için stack trace yazdırır; --full-stacktrace ise daha ayrıntılı çıktı sağlar. ([docs.gradle.org](https://docs.gradle.org/current/userguide/command_line_interface.html?utm_source=openai))
./gradlew build --stacktrace
./gradlew test --stacktrace
Bu komutlar hatayı düzeltmez; yalnızca teşhis verisini artırır. Bu nedenle stack trace çıktısında görülen asıl alt nedeni ayırmak gerekir. Örneğin HTTP durum kodu, bağlantı zaman aşımı veya sertifika hatası görüyorsanız koordinatı tekrar tekrar değiştirmek yerine ağ ve repository erişimini incelemek gerekir.
4. Cache'i kontrollü biçimde test edin
Gradle dependency'leri yerel cache üzerinden de çözümleyebilir. Bu durum, daha önce başarılı olan bir build'in ağ bağlantısı olmadan çalışabilmesini sağlar; ancak cache ile uzak repository'nin güncel durumu birbirinden ayrıştığında kafa karıştırıcı sonuçlar doğabilir.
--offline seçeneği, Gradle'ın ağ kaynaklarına erişmeden yalnızca yerel cache'teki modüllerle çalışmasını ister. Gerekli dependency cache'te bulunmuyorsa build başarısız olur. Bu yüzden offline mod, genel çözüm komutu değil, “dependency makinemde kayıtlı mı?” sorusuna yardımcı olan kontrollü bir testtir. ([docs.gradle.org](https://docs.gradle.org/current/userguide/dependency_caching.html?utm_source=openai))
./gradlew build --offline
./gradlew dependencies --offline
Normal build ağ üzerinden çalışırken --offline ile başarısız oluyorsa dependency'nin yerel cache'te bulunmaması veya eksik olması olasıdır. Her iki durumda da başarısız oluyorsa sorun cache'ten önceki yapılandırma, koordinat veya erişim katmanlarında aranmalıdır.
--refresh-dependencies ise cache klasörünü körlemesine silmekten farklıdır. Bu seçenek, dependency çözümleme durumunu yenileyerek Gradle'ın yapılandırılmış uzak repository'leri tekrar kontrol etmesini sağlar. Gradle, değişmeyen dosyaları mümkün olduğunda yeniden indirmeden metadata ve checksum kontrolleri yapabilir; dolayısıyla bu seçenek her zaman bütün JAR dosyalarının baştan indirilmesi anlamına gelmez. ([docs.gradle.org](https://docs.gradle.org/current/userguide/dependency_caching.html?utm_source=openai))
./gradlew build --refresh-dependencies
./gradlew test --refresh-dependencies --stacktrace
Bu komutu şu durumlarda kullanmak daha anlamlıdır:
- Repository ayarını düzelttikten sonra Gradle eski çözümleme bilgisini kullanıyor gibi görünüyorsa,
- Değişen veya dinamik version kullanan bir dependency beklenenden farklı çözülüyorsa,
- Uzak repository'deki metadata ile yerel cache'in durumu arasında tutarsızlık şüphesi varsa.
Önce koordinatı ve repository'yi doğrulamadan --refresh-dependencies kullanmak, yalnızca aynı yanlış isteği yeniden yapar. Bu nedenle cache yenileme, teşhisin ilk değil orta aşamasında uygulanmalıdır.
5. Java uyumluluğunu son katmanda kontrol edin
Dependency gerçekten bulunuyor olsa bile Java uyumluluğu nedeniyle build tamamlanamayabilir. Burada iki farklı durumu ayırmak gerekir: Gradle'ın kendisinin hangi JVM üzerinde çalıştığı ve projenin kaynak kodunu hangi Java sürümü için derlediği. Ayrıca kullanılan kütüphanenin derlenmiş bytecode seviyesi, çalıştırma ortamının desteklediği seviyeden yüksek olabilir.
Bu nedenle aşağıdaki bilgileri birlikte kaydedin:
./gradlew --versionçıktısındaki Gradle ve JVM bilgisi,- İşletim sisteminde kullanılan
java -versionsonucu, - Build dosyasındaki Java toolchain veya source/target ayarları,
- Hatanın gerçekten “dependency bulunamadı” mı, yoksa “unsupported class version”, “release version not supported” veya benzeri bir uyumluluk hatası mı olduğu.
Dependency'nin bulunamaması ile dependency'nin derleme sırasında kullanılamaması aynı problem değildir. İlkinde Gradle modül metadata'sına veya artefact'a ulaşamaz; ikincisinde artefact bulunmuş olsa bile Java derleyicisi ya da çalışma zamanı onu kullanamaz. Bu ayrım yapılmadan Java sürümünü değiştirmek veya cache temizlemek sorunu gereksiz yere büyütebilir.
Java seviyenizi ve dependency tanımlarını okuma becerinizi ölçmek isterseniz, Java bilgi testi üzerinden mevcut durumunuzu kontrol edebilirsiniz.
Hata Mesajındaki Repository, Group, Artifact ve Version Nasıl Okunur?

Gradle'ın sık görülen hata biçimlerinden biri, özetle Could not find group:artifact:version yapısını kullanır. Bu ifadeyi tek parça olarak okumak yerine repository, group, artifact ve version olmak üzere dört ayrı bileşene ayırmak gerekir. Dört bileşenden yalnızca biri yanlışsa Gradle doğru kaynağa erişse bile istenen modülü bulamayabilir.
Repository: Aramanın yapıldığı kaynak
Repository, dependency metadata'sının ve indirilecek artefact'ların arandığı kaynaktır. Gradle yapılandırmasında bu kaynak genellikle Maven veya Ivy repository biçiminde tanımlanır. Repository, “hangi kütüphaneyi istiyorum?” sorusunun cevabı değil, “bu kütüphaneyi nerede aramalıyım?” sorusunun cevabıdır.
Bir hata mesajında birden fazla repository adresi listelenebilir. Bu liste, Gradle'ın hangi kaynakları denediğini anlamanıza yardımcı olur; fakat listede bir adresin bulunması, o adresteki koordinatın kesinlikle mevcut olduğu anlamına gelmez. Ayrıca uygulama dependency'leri için kullanılan repository'ler ile plugin çözümlemesinde kullanılan repository'ler aynı katman değildir. ([docs.gradle.org](https://docs.gradle.org/current/userguide/declaring_repositories_basics.html?utm_source=openai))
Group: Adlandırma alanı
Group, kütüphanenin veya projeyi yayımlayan organizasyonun adlandırma alanını temsil eder. Java ekosisteminde bu bölüm sıklıkla ters alan adı biçiminden türetilir; ancak okuyucu açısından kritik nokta, group değerinin dependency'yi yayınlayan tarafın koordinatındaki tam metin olduğudur.
Örneğin org.example ile com.example Gradle için birbirinin alternatifi değildir. İsimler benzer görünse de iki farklı group anlamına gelir. Group değerindeki bir harf, nokta veya tire farkı yanlış modül aranmasına yol açabilir.
Artifact: Modül veya kütüphane adı
Artifact, projenin kullanmak istediği modülün adıdır. Bir platform, istemci kütüphanesi, test yardımcı paketi veya çekirdek modül farklı artifact adlarına sahip olabilir. Bu nedenle yalnızca kütüphanenin marka ya da proje adını bilmek yeterli değildir; dependency bildiriminde beklenen modül adını da öğrenmek gerekir.
Artifact adındaki tekil-çoğul farkı, alt modül eki veya tire-alt çizgi farkı bile çözümlemeyi değiştirir. Bir kütüphanenin ana modülü bulunurken test modülü, eklenti modülü veya farklı platforma özel modülü bulunamayabilir.
Version: İstenen sürüm seçimi
Version, Gradle'ın group ve artifact eşleşmesi için istediği sürümdür. Sabit bir sürüm, dinamik bir sürüm aralığı veya başka bir sürüm kuralı kullanılabilir; ancak hata teşhisinde önce yazılan version'ın beklenen değer olduğunu doğrulamak daha güvenlidir.
Örneğin aşağıdaki satırda koordinatın üç bölümü açıkça görülebilir:
implementation("com.example:report-client:2.3.1")
Bu satırda:
com.examplegroup,report-clientartifact,2.3.1version değeridir.
Repository ise bu üçlüden ayrı olarak repositories bloğunda tanımlanır. Dolayısıyla “repository değeri dependency satırının içindeki ilk bölüm müdür?” sorusunun cevabı hayırdır. Dependency gösterimi çoğunlukla Maven koordinat mantığıyla yazılan group:artifact:version üçlüsünü kullanır; repository bu koordinatın aranacağı yerdir.
Kendi hata mesajınızı üç soruyla ayrıştırın
Could not find group:artifact:version benzeri bir mesaj gördüğünüzde şu üç soruyu sırayla sorun:
- Group ve artifact adları, dependency'nin resmî tanımındaki ifadeyle karakter karakter aynı mı?
- Version gerçekten erişilebilir ve proje için beklenen sürüm mü, yoksa yazım hatası veya yanlış varyant mı var?
- Bu üçlü, Gradle'ın kullandığını hata çıktısında gösterdiği repository'lerde mi aranıyor?
İlk iki soruda hata bulursanız repository erişimini incelemeden dependency satırını düzeltin. Üçlü doğru görünüyor ve beklenen repository listede yer alıyorsa, erişim, kimlik doğrulama, proxy veya cache katmanına geçin.
Java projelerinde dependency koordinatlarını, configuration'ları ve Gradle dosyalarını birlikte okumakta zorlanıyorsanız Java özel ders seçeneği bu konuları doğrudan kendi proje dosyalarınız üzerinden çalışmanız için uygun bir öğrenme yolu olabilir.
build.gradle, settings.gradle ve Plugin Repository Arasındaki Fark
Gradle dependency hatalarının önemli bir bölümü, doğru ayarın yanlış dosyaya eklenmesinden kaynaklanır. Dosyaları üç katman halinde düşünmek teşhisi kolaylaştırır: build.gradle veya build.gradle.kts proje içindeki dependency ve görev tanımlarını taşır; settings.gradle veya settings.gradle.kts build'in genel yapısını ve merkezi repository yönetimini düzenler; pluginManagement ise plugin çözümleme katmanını yapılandırır.
build.gradle ve build.gradle.kts: Proje dependency'leri
build.gradle, Groovy DSL kullanır. build.gradle.kts ise Kotlin DSL kullanır. İki dosyanın amacı benzerdir; ancak sözdizimleri aynı değildir. Bir projede Groovy DSL kullanılırken Kotlin DSL örneğini doğrudan kopyalamak veya tersini yapmak, repository sorunu gibi görünen bir script derleme hatasına yol açabilir.
Normal bir Java projesinde dependency tanımı ve proje repository'si şu yapıya benzer:
plugins {
id 'java'
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.example:report-client:2.3.1'
}
Kotlin DSL karşılığı ise şöyledir:
plugins {
id("java")
}
repositories {
mavenCentral()
}
dependencies {
implementation("org.example:report-client:2.3.1")
}
Bu örneklerde repositories bloğu proje dependency'lerinin aranacağı kaynakları, dependencies bloğu ise kullanılacak modülleri belirler. Ancak settings dosyasında merkezi repository yönetimi etkinse, repository'lerin hangi kaynaktan ve hangi öncelikle alınacağı proje genelindeki ayarlara bağlı olabilir.
settings.gradle ve settings.gradle.kts: Build kapsamı ve merkezi repository yönetimi
settings.gradle veya settings.gradle.kts, yalnızca tek bir modülün build script'i değildir. Root project adı, dahil edilen alt projeler, plugin yönetimi ve merkezi dependency repository ayarları gibi build'in genelini etkileyen konular burada ele alınabilir.
Merkezi dependency repository yaklaşımında örnek Kotlin DSL yapısı şöyledir:
dependencyResolutionManagement {
repositories {
mavenCentral()
}
}
rootProject.name = "sample-app"
Gradle'ın merkezi repository yönetimi, repository bildirimlerini settings dosyasında ortaklaştırmak için kullanılır. Repository önceliği ayrıca repositoriesMode ile belirlenebilir. Resmî Gradle dokümantasyonunda PREFER_PROJECT varsayılan davranış olarak proje dosyasındaki repository'lere öncelik verir; PREFER_SETTINGS settings dosyasındaki tanımları öne çıkarır; FAIL_ON_PROJECT_REPOS ise proje içinde ayrıca repository tanımlanmasını build hatasına dönüştürür. Bu nedenle bir repository'yi yalnızca settings dosyasına eklemek veya yalnızca build dosyasına koymak, seçilen merkezi yönetim davranışına göre farklı sonuç verebilir. ([docs.gradle.org](https://docs.gradle.org/current/userguide/centralizing_repositories.html?utm_source=openai))
Bu katmanda en sık yapılan hata, repository tanımını bir alt projenin build.gradle dosyasına ekleyip settings dosyasının merkezi kurallarının bunu geçersiz kılmasını beklememektir. Tersi durumda da settings dosyasına eklenen repository'nin, proje repository'lerinin öncelikli olduğu bir yapılandırmada beklenen etkiyi göstermemesi mümkündür. Hangi dosyanın etkili olduğunu anlamak için repositoriesMode ayarını ve build çıktısındaki uyarıları birlikte inceleyin.
Plugin repository: Plugin çözümleme katmanı
Plugin repository, uygulamanızın kaynak kodunda kullandığı normal dependency'lerden farklı bir kavramdır. plugins {} bloğundaki plugin kimlikleri, build script'ini hazırlamak ve Gradle'a yeni yetenekler eklemek için çözülür. Uygulamanın derleme sırasında kullandığı kütüphaneler ise implementation, api, testImplementation gibi dependency tanımlarıyla çözülür.
Plugin repository ayarları genellikle settings dosyasındaki pluginManagement { repositories { ... } } bağlamında bulunur:
pluginManagement {
repositories {
gradlePluginPortal()
mavenCentral()
}
}
Gradle belgeleri, plugin çözümlemesi ile proje dependency çözümlemesinin farklı repository kümeleri kullandığını açıkça ayırır. Proje dependency'leri plugin repository'lerini otomatik olarak kullanmaz; yalnızca plugin repository eklemek, implementation satırındaki kütüphanenin bulunmasını sağlamaz. Aynı şekilde normal dependency repository'sine bir kaynak eklemek de plugin kimliğinin çözümleme sorununu doğrudan çözmeyebilir. ([docs.gradle.org](https://docs.gradle.org/current/userguide/declaring_repositories_basics.html?utm_source=openai))
Hangi hata hangi dosyaya işaret eder?
Could not find group:artifact:versionhatası çoğunlukla proje dependency'sinin koordinatı veya normal repository kapsamıyla ilgilidir.Plugin with id ... was not foundbenzeri bir hata plugin kimliği, plugin version'ı veyapluginManagementrepository'leri üzerinden incelenmelidir.- “Repository was added in settings but ignored” türü davranışlarda
dependencyResolutionManagementverepositoriesModeayarları kontrol edilmelidir. - Groovy veya Kotlin DSL script'i parse edilemiyorsa önce dosya türüyle kullanılan sözdiziminin eşleşip eşleşmediği doğrulanmalıdır.
Bu ayrım, aynı repository'yi her dosyaya kopyalamak yerine doğru katmanda düzeltme yapmanızı sağlar. Java yapılandırma temellerini canlı sınıf ortamında, dosya ve komut çıktıları üzerinden geliştirmek isteyenler canlı Java eğitimleri seçeneğini değerlendirebilir.
Gradle Dependency Sorunları İçin Kısa Karar Ağacı
Gradle dependency hatasını çözmenin en güvenli yolu, rastgele repository eklemek veya cache klasörlerini hemen silmek değildir. Önce hatanın hangi katmanda oluştuğunu belirlemek gerekir: dependency koordinatı mı yanlış, repository kapsamı mı eksik, ağ erişimi mi başarısız, yerel cache mi yanıltıyor, yoksa dependency bulunduğu hâlde Java uyumluluğu mu bozuluyor?
Aşağıdaki karar ağacı, teşhisi düşük riskli kontrollerden daha ileri kontrollerine doğru taşır. Her adımda yalnızca ilgili dosyayı ve hatanın ilgili satırını inceleyin.
- Koordinat doğru mu?
- Hayır:
build.gradleveyabuild.gradle.ktsiçindekigroup:artifact:versiondeğerini kontrol edin. - Yazım hatası, eksik sürüm, yanlış group adı veya artifact adında tire-alt çizgi farkı olup olmadığını inceleyin.
- Hata çıktısında
Could not find group:artifact:versionsatırını bulun ve dosyadaki dependency bildirimiyle karakter karakter karşılaştırın. - Evet: Bir sonraki adıma geçin.
- Hayır:
- Doğru repository kapsamda mı?
- Hayır: Projenin repository tanımını kontrol edin.
- Proje dependency’leri için
build.gradleveyabuild.gradle.kts, merkezi repository yönetimi içinsettings.gradleveyasettings.gradle.ktsdosyasına bakın. - Plugin çözümlemesiyle proje dependency çözümlemesini karıştırmayın. Plugin repository ayarları genellikle
pluginManagement { repositories { ... } }bloğunda, proje dependency repository’leri isedependencyResolutionManagement { repositories { ... } }veya ilgili proje yapılandırmasında yer alır. - Hata mesajında dependency’nin hangi repository URL’lerinde arandığını ve hangi URL’lerin sonuç vermediğini inceleyin.
- Evet: Repository erişimini test edin.
- Repository’ye erişilebiliyor mu?
- Hayır: DNS, internet bağlantısı, proxy, kimlik doğrulama, TLS/SSL ve kurumsal ağ kısıtlarını kontrol edin.
- Hata satırında
UnknownHostException,Connection timed out,Connection refused,407 Proxy Authentication Requiredveya SSL sertifikasıyla ilgili ifadeler arayın. - Repository adresini tarayıcıdan açabilmek tek başına yeterli değildir; Gradle’ın çalıştığı JDK ve işletim sistemi ortamının da aynı ağa erişebildiğini doğrulayın.
- Evet: Cache ve çalışma modunu ayırın.
- Gradle online mı çalışıyor, cache sonucu mu etkiliyor?
- Önce normal çözümlemeyi ayrıntılı hata zinciriyle çalıştırın:
./gradlew build --stacktrace. - Cache’teki metadata veya artifact durumundan şüpheleniyorsanız temiz bir yeniden değerlendirme isteyin:
./gradlew build --refresh-dependencies. - Makinenin ağa hiç çıkmadan yalnızca mevcut cache ile çalışıp çalışamayacağını sınamak için
./gradlew build --offlinekullanın. --offlineile alınan hata, dependency’nin uzak repository’de bulunmadığını kanıtlamaz; yalnızca gerekli modülün yerel cache’te kullanılamadığını gösterebilir.- Sonuç net değilse: Belirli dependency’nin neden seçildiğini veya çözümlenemediğini incelemek için
dependencyInsightçalıştırın.
- Önce normal çözümlemeyi ayrıntılı hata zinciriyle çalıştırın:
- Dependency bulunuyor ancak Java veya bytecode uyumluluğu bozuluyor mu?
- Dependency’nin indirildiğini, fakat derleme sırasında hata oluştuğunu ayırın.
UnsupportedClassVersionError,class file has wrong version,release version not supportedveya modül sistemiyle ilgili hata satırlarını arayın.- Kullanılan JDK’yı
java -versionile, Gradle’ın kullandığı JVM’i ise./gradlew --versionçıktısıyla karşılaştırın. - Gerekirse
java.toolchain,sourceCompatibility,targetCompatibilityveya Kotlin DSL’deki toolchain ayarlarını inceleyin.
- Yukarıdaki katmanlar uygunsa başka bir çözümleme veya derleme aşamasına geçin.
- Sorun transitive dependency çatışması, variant seçimi, capability, platform/BOM, dependency constraint veya plugin uyumluluğu olabilir.
- Bu aşamada tüm repository’leri değiştirmek yerine belirli dependency için
dependencyInsightraporu alın. - Çözümleme başarılı, fakat derleme başarısızsa artık “dependency bulunamadı” probleminden değil, derleme sınıf yolu veya kaynak kod uyumluluğu probleminden söz edilir.
Bu karar ağacındaki komutların davranışı Gradle’ın güncel komut satırı belgelerinde tanımlanır: --stacktrace ayrıntılı istisna zinciri sağlar, --offline ağ kaynaklarını kullanmadan cache ile çalışır, --refresh-dependencies dependency durumunu yeniden değerlendirir ve dependencyInsight belirli bir dependency’nin çözümleme sürecini gösterir. Kullanılan Gradle Wrapper sürümünde kesin seçenekleri görmek için ./gradlew --help komutu da çalıştırılabilir. Gradle Command-Line Interface belgeleri bu seçeneklerin güncel kullanım bağlamını açıklar.
Hata Türüne Göre Olası Neden ve Kontrol Adımı

Aynı Could not find ifadesi farklı katmanlardaki problemleri temsil edebilir. Bu nedenle aşağıdaki tabloda her hata türü için önce bilgi kazancı yüksek ve düşük riskli kontrol, ardından daha ileri inceleme adımı verilmiştir.
| Hata türü | Olası neden | İlk kontrol adımı | Sonraki adım |
|---|---|---|---|
| Koordinat yazım hatası | Yanlış group, artifact veya version; eksik sürüm; dependency satırında sözdizimi hatası | build.gradle veya build.gradle.kts içindeki group:artifact:version değerini hata mesajındaki koordinatla karşılaştırın. |
Resmî artifact sayfasındaki koordinatı ve kullanılan repository’deki metadata yolunu doğrulayın; önce repository değiştirmeyin. |
| Repository tanımının eksik veya yanlış kapsamda olması | Repository’nin yanlış dosyada tanımlanması; merkezi repository yönetiminin proje ayarını geçersiz kılması; plugin repository ile proje repository’sinin karıştırılması | settings.gradle(.kts) ve build.gradle(.kts) dosyalarında repository bloklarını inceleyin. |
Dependency’nin proje çözümleme kapsamına, plugin’in ise plugin çözümleme kapsamına tanımlandığını kontrol edin. |
| Repository’ye erişememe | İnternet bağlantısı, DNS, zaman aşımı, repository sunucusuna erişim veya geçici ağ kesintisi | Hata çıktısındaki repository URL’sini, UnknownHostException ve Connection timed out satırlarını inceleyin. |
./gradlew build --stacktrace ile kök istisnayı bulun; farklı ağda veya kurumsal ağ yöneticisinin bilgisiyle tekrar test edin. |
| Proxy, SSL veya ağ sorunu | Yanlış proxy host/port, proxy kimlik doğrulaması, TLS sertifikası, kurumsal güvenlik duvarı veya SSL inspection | 407, SSLHandshakeException, PKIX path building failed ve sertifika hatalarını arayın. |
Proxy ayarlarını güvenli Gradle özellikleriyle yapılandırın; kurumsal sertifika gereksinimini ağ yöneticisiyle doğrulayın. |
| Offline mod veya cache kaynaklı yanıltıcı sonuç | Gradle’ın offline çalışması; eksik, eski veya önceki repository ayarından kalmış cache metadata’sı | --offline kullanılıp kullanılmadığını ve dependency’nin yerel cache’te bulunup bulunmadığını kontrol edin. |
Ağa erişim mümkünse ./gradlew build --refresh-dependencies ile cache durumunu yeniden değerlendirin. |
| Dependency bulunmasına rağmen Java veya bytecode uyumsuzluğu | Dependency’nin üretilmiş bytecode seviyesinin kullanılan JDK ile uyuşmaması; yanlış toolchain veya derleme hedefi | java -version, ./gradlew --version ve UnsupportedClassVersionError gibi hata satırlarını karşılaştırın. |
Java toolchain ve derleme hedefini uyumlu hâle getirin; dependency’nin bulunduğunu, problemin derleme aşamasında oluştuğunu ayırın. |
| Transitive dependency çözümleme problemi | İki kütüphanenin farklı sürüm istemesi; constraint, BOM, platform, variant veya capability çatışması | ./gradlew dependencyInsight --dependency dependency-adi --configuration compileClasspath komutuyla ilgili dependency’yi inceleyin. |
Seçilen sürümün nedenini belirleyin; doğrudan sürüm sabitlemeden önce constraint, platform veya uyumlu üst dependency düzenlemesini değerlendirin. |
--refresh-dependencies cache’i bütün olarak silmekten önce kullanılabilecek daha kontrollü bir teşhis seçeneğidir; Gradle, dependency çözümleme durumunu yeniden değerlendirir ve gerekli gördüğü artifact’leri yeniden kontrol eder. --offline ise ağ erişimini tamamen devre dışı bırakarak yalnızca mevcut cache ile çözümleme yapılabildiğini sınar. Bu iki seçenek birbirinin alternatifi değildir: ilki “uzaktaki repository ile güncel bir çözümleme yapılabiliyor mu?” sorusuna, ikincisi “bu makinedeki cache tek başına yeterli mi?” sorusuna yaklaşır.
--stacktrace tek başına dependency’yi düzeltmez; ancak yüzeydeki “Could not resolve” mesajının altında DNS, proxy, SSL, kimlik doğrulama veya dosya sistemi kaynaklı hangi istisnanın bulunduğunu gösterir. dependencyInsight ise özellikle dependency bulunduğu hâlde beklenmeyen bir sürüm seçildiğinde ya da transitive dependency zinciri çözülemediğinde kullanılır. Belirli bir konfigürasyon vermek, raporu gereksiz sonuçlardan ayırır; örneğin Java projesinde compileClasspath veya test tarafında testRuntimeClasspath seçilebilir. Gradle Viewing and Debugging Dependencies belgeleri bu raporun dependency seçimine ve çözümleme nedenlerine odaklandığını açıklar.
Ağ, Proxy ve Gradle Cache Sorunları Nasıl Ayrıştırılır?
Repository’ye erişim problemlerinde güvenli sıra şudur: önce hangi repository adresinin başarısız olduğunu bulun, sonra ağ ve proxy katmanını inceleyin, en son cache veya offline çalışma ihtimalini test edin. Böylece geçici bir ağ sorununu cache hatası sanıp gereksiz dosya silmez, gerçek problemi görünmez hâle getirmezsiniz.
1. Önce başarısız repository adresini ve kök hata satırını bulun
Hata çıktısında yalnızca en üstteki Could not resolve veya Could not find mesajına bakmayın. Alt satırlarda Gradle’ın hangi URL’ye erişmeye çalıştığı ve neden başarısız olduğu yazabilir. Şu komut, çözümleme sırasında oluşan istisna zincirini daha görünür hâle getirir:
./gradlew build --stacktrace
Çıktıda öncelikle şu tür ifadeleri arayın:
UnknownHostException: DNS çözümlemesi veya host adı problemi olasılığını artırır.Connection timed out: ağ yoluna, güvenlik duvarına veya erişilemeyen sunucuya işaret edebilir.Connection refused: hedefe ulaşılsa da bağlantının kabul edilmediğini gösterebilir.407 Proxy Authentication Required: proxy kimlik doğrulaması gerektiğini gösterir.SSLHandshakeExceptionveyaPKIX path building failed: TLS sertifikası ya da güven zinciri sorunu olasılığını gösterir.
Bu satırlar görülmeden repository listesini genişletmek doğru bir ilk adım değildir. Önce mevcut repository adresinin gerçekten gerekli artifact’i barındırıp barındırmadığı ve Gradle’ın bu adrese erişip erişemediği ayrıştırılmalıdır.
2. Proxy ve kurumsal ağ katmanını kontrol edin
Gradle, proxy yapılandırmasında JVM sistem özelliklerini kullanabilir. Bu ayarlar proje içindeki gradle.properties veya kullanıcı Gradle dizinindeki gradle.properties dosyasında tanımlanabilir. Örnek biçim şöyledir:
systemProp.https.proxyHost=proxy.example
systemProp.https.proxyPort=8080
systemProp.http.proxyHost=proxy.example
systemProp.http.proxyPort=8080
Gerçek proxy adresi, portu ve kimlik doğrulama gereksinimi kurumun ağ yapılandırmasına göre değişir. Proxy parolasını doğrudan build.gradle içine yazmayın ve repository kimlik bilgilerini kaynak kod deposuna göndermeyin. Parola veya token içeren dosyaların Git geçmişine girmediğini kontrol edin.
Kurumsal ağlarda HTTPS trafiğinin denetlenmesi, özel sertifika otoriteleri veya proxy üzerinden zorunlu kimlik doğrulaması bulunabilir. Böyle bir durumda hata “dependency bulunamadı” şeklinde görünse bile asıl neden artifact’in yokluğu değil, TLS oturumunun kurulamaması olabilir. Kök nedeni --stacktrace çıktısındaki en alt Caused by satırlarından takip edin.
3. Önce normal, sonra yeniden değerlendirilmiş çözümleme yapın
İlk denemeyi mümkün olduğunca değişiklik yapmadan gerçekleştirin:
./gradlew dependencies
Bu komut hangi dependency zincirlerinin çözümlendiğini görmenizi sağlar. Belirli bir konfigürasyonu incelemek için proje yapısına göre ilgili konfigürasyonu seçebilirsiniz. Hata cache’teki metadata’nın eski veya önceki repository ayarlarından etkilenmiş olabileceğini düşündürüyorsa ikinci adım olarak şunu deneyin:
./gradlew build --refresh-dependencies
Bu seçeneğin amacı cache klasörlerini rastgele silmek değil, Gradle’ın dependency durumunu yeniden değerlendirmesini sağlamaktır. Yeniden değerlendirme sonrasında hata aynı URL ve aynı kök nedenle devam ediyorsa problem büyük olasılıkla yalnızca yerel cache değildir; repository kapsamı, erişim veya dependency koordinatı yeniden incelenmelidir.
4. Offline modun teşhisi nasıl yanıltabileceğini anlayın
--offline seçeneği Gradle’ın ağ kaynaklarına erişmeden mevcut cache ile çalışmasını sağlar:
./gradlew build --offline
Gerekli dependency cache’te yoksa build başarısız olur. Bu sonuç, dependency’nin uzak repository’de bulunmadığını göstermez; yalnızca bu makinede çevrim dışı çözümleme için yeterli yerel kayıt bulunmadığını gösterir. Bu nedenle online erişimi test etmek istediğiniz bir aşamada --offline kullanmayın.
Tersine, bir build’ın offline modda başarılı olması da repository erişiminin şu anda sağlıklı olduğunu kanıtlamaz. Başarının nedeni, daha önce indirilmiş artifact’lerin cache’te bulunması olabilir. Ağ kaynaklı bir problemi izole etmek için online ve offline sonuçlarını ayrı yorumlayın:
- Online başarısız, offline başarısız: ağ sorunu, eksik cache veya yanlış koordinat birlikte incelenmelidir.
- Online başarılı, offline başarısız: dependency erişilebilir olabilir, ancak yerel cache tam değildir.
- Online başarısız, offline başarılı: mevcut cache yeterlidir; repository erişimi ayrıca sorunludur.
- Her iki modda da dependency çözülüyor, build yine başarısız: sorun dependency indirme katmanından çok Java, bytecode veya kaynak kod uyumluluğunda olabilir.
5. Cache’i silmeden önce son kontrolü yapın
Gradle cache’leri tekrar build sürelerini kısaltmak için kullanılır ve çoğu durumda manuel silme gerektirmez. Cache’i doğrudan silmek, teşhis için önemli olan “hangi metadata kullanıldı?” bilgisini kaybettirebilir ve ağ bağlantısı hâlâ bozuksa sorunu daha da belirsiz hâle getirebilir.
Bu nedenle şu sırayı koruyun:
- Repository URL’sini ve hatanın kök satırını belirleyin.
- Koordinat ile repository kapsamını kontrol edin.
--stacktraceile kök istisnayı bulun.- Online çözümlemeyi
--refresh-dependenciesile yeniden deneyin. - Yalnızca cache ile çalışmayı sınamak için ayrıca
--offlinekullanın. - Gerekirse belirli dependency için
dependencyInsightraporu alın. - Sonuçlar hâlâ çelişkiliyse temiz bir çalışma ortamında veya farklı bir ağ bağlantısında karşılaştırmalı test yapın.
Cache temizleme kararı ancak sorunun cache kaynaklı olduğuna dair yeterli belirti oluştuğunda düşünülmelidir. Ayrıca işletim sistemine göre Gradle User Home konumu değişebilir; bu nedenle rastgele proje klasöründeki .gradle dizinini silmek, kullanıcı cache’ini temizlemekle aynı şey değildir.
6. Güvenlik kontrolünü teşhisin parçası yapın
Bir dependency hatasını çözmek için güvenliği zayıflatmayın. Kaynağı belirsiz bir repository eklemek, HTTPS yerine güvensiz bir adres kullanmak veya sertifika doğrulamasını devre dışı bırakmak kısa vadede farklı bir hata üretebilir; ancak build zincirinin güvenilirliğini bozar.
- Repository adreslerini güvenilir ve beklenen kaynaklarla sınırlandırın.
- Kimlik bilgilerini
build.gradle,build.gradle.ktsveya commit edilen dosyalara sabitlemeyin. - Proxy kullanıcı adı, parola, token ve kurum içi URL’leri hata çıktısını paylaşmadan önce maskeleyin.
- Stack trace içinde dosya yolları, kullanıcı adları, ortam değişkenleri veya erişim belirteçleri bulunabileceğini unutmayın.
- SSL hatasını “sertifika kontrolünü kapatarak” geçmeye çalışmak yerine kurumun doğru sertifika ve proxy prosedürünü izleyin.
Gradle’ın proxy ayarlarında HTTP, HTTPS ve SOCKS için ayrı JVM özellikleri kullanılabilir; bu nedenle yalnızca tarayıcının internete erişebilmesi, Gradle’ın aynı şekilde çalıştığını garanti etmez. Gradle Networking belgeleri proxy yapılandırmasının JVM sistem özellikleri ve gradle.properties üzerinden nasıl ele alındığını açıklar.
Java Sürüm Uyumluluğunu Kontrol Etme ve Mini Gradle Projesi
Gradle’ın bir dependency’yi bulamaması ile dependency indirildikten sonra Java derlemesinin başarısız olması aynı problem değildir. İlk durumda Gradle; repository, group, artifact veya version üzerinden gerekli modülü çözememiştir. İkinci durumda ise modül bulunmuş ve indirilmiş olabilir; ancak kullanılan Java sürümü, derleme hedefi, bytecode seviyesi veya dependency’nin gerektirdiği Java özellikleri birbiriyle uyumlu değildir.
Bu ayrımı yapmak için önce ./gradlew --version ile Gradle’ın hangi Java çalışma ortamında çalıştığını, ardından proje yapılandırmasındaki toolchain ve dependency koordinatlarını kontrol edin. Gradle’ın resmî uyumluluk matrisinde Gradle 9.7.1 için Gradle’ı çalıştıran JVM aralığı Java 17 ile Java 26 olarak belirtilirken, Java toolchain kullanılarak derleme ve test için farklı bir JDK seçilebilir. ([docs.gradle.org](https://docs.gradle.org/9.7.0/userguide/compatibility.html?utm_source=openai))
Önce Gradle’ı çalıştıran Java sürümünü kontrol edin
Terminalde aşağıdaki komutu çalıştırın:
./gradlew --version
Windows ortamında aynı komutun karşılığı genellikle şöyledir:
gradlew.bat --version
Çıktıda özellikle şu alanlara bakın:
- Gradle: Projenin wrapper tarafından kullandığı Gradle sürümü.
- JVM: Gradle daemon’unu çalıştıran Java sürümü.
- OS: İşletim sistemi ve mimari bilgisi.
Buradaki JVM değeri, projenizin kaynak kodunu hangi Java sürümüyle derlemek istediğinizden farklı olabilir. Örneğin Gradle daemon Java 21 ile çalışırken Java 17 toolchain’i kullanarak derleme yapılabilir. Bu nedenle yalnızca bilgisayarda java -version komutunun verdiği sonucu incelemek yeterli değildir; Gradle’ın gerçekten hangi JVM ile çalıştığı da görülmelidir.
Dependency indirilemedi mi, yoksa Java derlemesi mi başarısız?
İki hata grubunu birbirinden ayırmak için hata mesajının hangi aşamada oluştuğuna bakın.
| Gözlenen hata | Genellikle işaret ettiği aşama | İlk kontrol |
|---|---|---|
Could not find group:artifact:version |
Dependency çözümleme | Koordinat ve repository |
Could not GET, Read timed out veya PKIX path building failed |
Repository’ye erişim | Ağ, proxy, sertifika ve VPN |
Unsupported class file major version |
Java bytecode uyumsuzluğu | JDK, Gradle ve dependency Java seviyesi |
error: invalid source release |
Derleme hedefi ile JDK uyumsuzluğu | sourceCompatibility veya toolchain |
package ... does not exist |
Classpath veya dependency kapsamı | implementation, testImplementation ve import |
Örneğin Could not find mesajı, Java sürümünden önce koordinat veya repository problemine işaret eder. Dependency indirildikten sonra compileJava görevi sırasında hata alıyorsanız repository’ye tekrar tekrar odaklanmak yerine Java çalışma ortamını ve derleme hedefini incelemek gerekir.
Kontrollü hatalı mini proje
Aşağıdaki örnekte Java projesi için Maven Central kullanılıyor. Seçilen dependency koordinatı org.apache.commons:commons-lang3:3.17.0 olarak Maven Central kayıtlarında yer alıyor ve ilgili sürüm Java 8 ve üzeri için yayımlanmış durumda. ([central.sonatype.com](https://central.sonatype.com/artifact/org.apache.commons/commons-lang3/3.17.0?utm_source=openai))
Ancak önce yalnızca artifact adını yanlış yazarak kontrollü bir hata üretelim. Repository doğru olduğu için bu örnekte sorun ağ ayarı değil, dependency koordinatıdır.
plugins {
id 'java'
id 'application'
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.apache.commons:commons-lang3x:3.17.0'
}
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
application {
mainClass = 'example.Main'
}
Bu yapılandırmada commons-lang3x ifadesi hatalıdır. Doğru artifact adı commons-lang3 olmalıdır. Gradle, mavenCentral() repository’sine erişebilse bile yanlış artifact koordinatı nedeniyle dependency’yi çözemez. Hata mesajında çoğunlukla şu koordinata benzer bir arama görürsünüz:
Could not find org.apache.commons:commons-lang3x:3.17.0
Burada yapılacak ilk işlem cache temizlemek veya Java sürümünü değiştirmek değildir. Önce group, artifact ve version değerleri resmî artifact kaydıyla karşılaştırılmalıdır.
Düzeltilmiş yapılandırma: repository, dependency ve Java toolchain
Aşağıdaki düzeltilmiş build.gradle dosyasında üç unsur tutarlıdır:
- Dependency’nin bulunduğu repository olarak Maven Central tanımlanmıştır.
- Dependency koordinatı doğru group, artifact ve version değerlerini kullanır.
- Java derlemesi için Java 17 toolchain’i açıkça belirtilmiştir.
plugins {
id 'java'
id 'application'
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.apache.commons:commons-lang3:3.17.0'
}
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
application {
mainClass = 'example.Main'
}
Bu örnekte Gradle’ın çalıştığı JVM ile Java kaynak kodunun derleneceği toolchain aynı olmak zorunda değildir. Bununla birlikte, seçtiğiniz Gradle sürümünün çalıştırma JVM gereksinimi ile makinedeki JDK kurulumunun uyumlu olması gerekir. Projenin CI ortamında ve geliştirici bilgisayarında farklı JDK’lar varsa toolchain tanımı, derleme hedefini daha öngörülebilir hâle getirir.
Basit bir src/main/java/example/Main.java dosyası da ekleyelim:
package example;
import org.apache.commons.lang3.StringUtils;
public class Main {
public static void main(String[] args) {
String value = "gradle dependency";
System.out.println(StringUtils.capitalize(value));
}
}
Bu sınıf, dependency’nin yalnızca indirilmesini değil, derleme classpath’inde gerçekten kullanılmasını da test eder. StringUtils import edilebiliyor ve proje çalıştırılabiliyorsa çözümleme ile derleme aşamaları birlikte doğrulanmış olur.
settings.gradle dosyasında repository tanımlamak
Tek modüllü basit projelerde repository tanımı build.gradle içinde yapılabilir. Birden fazla modül içeren projelerde repository’leri settings.gradle içinde merkezi olarak yönetmek daha tutarlı olabilir. Gradle dokümantasyonuna göre dependencyResolutionManagement bloğu, tüm projeler için dependency repository’lerini merkezi biçimde tanımlamak amacıyla kullanılabilir. ([docs.gradle.org](https://docs.gradle.org/current/userguide/declaring_repositories_basics.html?utm_source=openai))
pluginManagement {
repositories {
gradlePluginPortal()
mavenCentral()
}
}
dependencyResolutionManagement {
repositories {
mavenCentral()
}
}
rootProject.name = 'gradle-java-example'
Bu dosyadaki iki repository alanını karıştırmamak gerekir:
pluginManagement.repositories,plugins {}bloğunda kullanılan Gradle plugin’lerinin çözülmesi içindir.dependencyResolutionManagement.repositories, uygulamanınimplementation,runtimeOnlyveyatestImplementationgibi dependency’lerini bulmak içindir.
Örneğin mavenCentral() değerini yalnızca pluginManagement içine yazmak, uygulama dependency’lerinin otomatik olarak aynı repository’den çözüleceği anlamına gelmez. Gradle, plugin çözümleme ile proje dependency çözümlemesini farklı repository kümeleri üzerinden yürütür. ([docs.gradle.org](https://docs.gradle.org/current/userguide/declaring_repositories_basics.html?utm_source=openai))
Başarılı build ve teşhis komutları
Dosyalar düzeltildikten sonra projeyi wrapper ile derleyin:
./gradlew clean build
./gradlew run
Başarılı bir build sonunda Gradle çıktısında BUILD SUCCESSFUL ifadesini görmeniz beklenir; Gradle’ın resmî örneklerinde hem build hem de run görevleri sonrasında bu ifade kullanılır. ([docs.gradle.org](https://docs.gradle.org/current/userguide/task_basics.html?utm_source=openai))
Dependency hâlâ çözülemiyorsa komutları rastgele sırayla denemek yerine amaçlarına göre kullanın:
./gradlew build --stacktrace: Hatanın hangi görevde ve hangi alt exception ile oluştuğunu görmek için kullanılır../gradlew dependencyInsight --dependency commons-lang3 --configuration compileClasspath: Belirli dependency’nin hangi sürümünün, hangi sebeple seçildiğini incelemek için kullanılır../gradlew build --refresh-dependencies: Repository’deki metadata veya artifact durumu değişmiş olabileceğinde cache kayıtlarının yeniden kontrol edilmesini sağlar../gradlew build --offline: Gradle’ın ağ erişimi olmadan yalnızca yerel cache’i kullanmasını zorunlu kılar. Dependency cache’te yoksa bu seçenek yeni bir artifact indirmez.
--refresh-dependencies ağ bağlantısı gerektirebileceği için proxy veya sertifika sorunu varken çözümü garanti etmez. --offline ise repository’ye erişim problemini gizlemek için değil, dependency’nin yerel cache’te bulunup bulunmadığını ayırt etmek için değerlidir. Gradle’ın cache dokümantasyonunda bu iki seçeneğin dependency yenileme ve yalnızca cache kullanma davranışları ayrı olarak açıklanır. ([docs.gradle.org](https://docs.gradle.org/current/userguide/dependency_caching.html?utm_source=openai))
Örneğin normal çevrim içi build başarısız, --offline build başarılıysa dependency daha önce indirilmiş; sorun büyük olasılıkla mevcut repository erişimi, proxy, DNS veya sertifika katmanındadır. Hem çevrim içi hem çevrim dışı build başarısızsa dependency hiç indirilmemiş, yanlış koordinatla cache’e alınmış veya yapılandırma başka bir repository kapsamı tarafından geçersiz kılınmış olabilir.
Java sürümü kaynaklı derleme hatasını ayırma
Java uyumluluğunu kontrol ederken şu katmanları ayrı inceleyin:
- Gradle runtime JDK: Gradle daemon’unu çalıştıran JVM, kullandığınız Gradle sürümüyle uyumlu mu?
- Java toolchain:
java.toolchainhangi Java sürümünü seçiyor? - Derleme hedefi: Kaynak ve bytecode hedefi projenin beklediği seviyede mi?
- Dependency gereksinimi: Kütüphane daha yeni bir Java bytecode sürümüyle mi yayımlanmış?
- Çalıştırma ortamı: Derlenen uygulamayı çalıştıran JRE, derleme sırasında kullanılan Java seviyesini destekliyor mu?
Dependency bulunamadığında hata genellikle çözümleme görevleri sırasında, örneğin compileClasspath veya ilgili configuration’ın dependency graph’ı oluşturulurken görülür. Dependency indirildiği hâlde Java derlemesi başarısızsa hata çoğunlukla compileJava görevi altında görünür. Bu durumda repository tanımını değiştirmek yerine --stacktrace ile ilk gerçek Java exception’ını bulmak daha doğrudur.
Unsupported class file major version mesajı, kullanılan JDK’nın okumaya veya çalıştırmaya çalıştığı bytecode seviyesinin desteklenmediğini gösterebilir. invalid source release ise çoğunlukla istenen Java dil seviyesinin mevcut derleyici tarafından desteklenmediği anlamına gelir. Her iki durumda da çözüm; dependency koordinatını değiştirmekten önce JDK kurulumu, Gradle wrapper sürümü ve toolchain ayarını aynı tablo üzerinde karşılaştırmaktır.
Sırayla kontrol et
Aşağıdaki listeyi kendi projenizde tek tek işaretleyerek ilerleyin. Bir adımda sorun bulursanız sonraki adımlara geçmeden önce o sorunu düzeltin.
- ☐ Koordinat: Group, artifact ve version değerlerini resmî artifact kaydıyla karşılaştırdım.
- ☐ Dosya/kapsam: Dependency’yi doğru modülün
build.gradleveyabuild.gradle.ktsdosyasına ve doğru configuration’a yazdım. - ☐ Repository: Proje dependency’si için gerekli repository’yi
repositoriesveya uygun merkezi repository yönetimi bloğunda tanımladım. - ☐ Ağ/proxy: Repository adresine tarayıcı, kurumsal ağ, VPN, proxy ve sertifika açısından erişilebildiğini kontrol ettim.
- ☐ Online-offline durumu: Sorunun ağdan mı yoksa yerel cache’ten mi kaynaklandığını çevrim içi ve
--offlinedenemeleriyle ayırdım. - ☐ Cache: Gerekli durumda
--refresh-dependenciesile metadata ve artifact kontrolünü yeniledim. - ☐ Java sürümü:
./gradlew --version, JDK, toolchain ve dependency bytecode uyumluluğunu karşılaştırdım. - ☐ Tekrar build: Düzeltmelerden sonra önce
./gradlew clean build --stacktrace, gerekiyorsa ardındandependencyInsightçalıştırdım.
Sık Sorulan Sorular
Gradle “Could not find” hatası ile “failed to resolve” hatası arasındaki fark nedir?
Could not find genellikle belirtilen group, artifact ve version koordinatının tanımlı repository’lerde bulunamadığını anlatır. failed to resolve ise daha geniş bir ifadedir; yanlış koordinatın yanı sıra repository erişimi, metadata, authentication, proxy, sürüm çatışması veya transitif dependency sorunlarını da kapsayabilir. Bu nedenle önce tam hata satırını, ardından hangi configuration ve repository’nin kullanıldığını incelemek gerekir. Gradle dependency çözümleme sürecinde modül metadata’sı ve artifact’ler repository sırasına göre aranır. ([docs.gradle.org](https://docs.gradle.org/current/userguide/declaring_repositories_basics.html?utm_source=openai))
Dependency repository ayarını build.gradle dosyasına mı yoksa settings.gradle dosyasına mı yazmalıyım?
Tek bir proje için build.gradle içindeki repositories bloğu yeterli olabilir. Birden fazla modülü aynı repository politikasıyla yönetmek istiyorsanız settings.gradle içindeki dependencyResolutionManagement daha merkezi bir seçimdir. Plugin repository’leri ise ayrıca pluginManagement.repositories içinde tanımlanır; plugin repository’si ile proje dependency repository’si aynı kavram değildir. ([docs.gradle.org](https://docs.gradle.org/current/userguide/centralizing_repositories.html?utm_source=openai))
Gradle dependency bulunamadığında --refresh-dependencies ne zaman kullanılmalı?
--refresh-dependencies, dependency koordinatının doğru olduğundan ve repository’ye erişimin bulunduğundan emin olduktan sonra cache metadata’sının güncel olmayabileceğinden şüphelenildiğinde kullanılmalıdır. Yanlış group, artifact veya version değerini düzeltmez; ayrıca internet, proxy veya sertifika sorunlarını da tek başına çözmez. Gradle bu seçenekle dependency durumunu uzak repository’lerde yeniden kontrol eder. ([docs.gradle.org](https://docs.gradle.org/current/userguide/dependency_caching.html?utm_source=openai))
--offline seçeneği dependency çözümleme hatasını teşhis etmeye nasıl yardımcı olur?
--offline, Gradle’ın yeni bir repository erişimi kurmasını engeller ve yalnızca yerel cache’te bulunan dependency’lerle çalışmasını sağlar. Normal build başarısızken offline build başarılıysa daha önce indirilmiş dependency kullanılabiliyor demektir; bu durum ağ, proxy veya sertifika katmanını incelemek için güçlü bir ipucudur. Offline build de başarısızsa gerekli dependency cache’te bulunmuyor veya proje zaten yanlış koordinat kullanıyor olabilir. ([docs.gradle.org](https://docs.gradle.org/current/userguide/dependency_caching.html?utm_source=openai))
Dependency indirildiği hâlde Java derlemesi başarısız oluyorsa hangi uyumluluk kontrolleri yapılmalıdır?
Önce Gradle’ın çalıştığı JVM’yi, ardından Java toolchain ayarını, kaynak ve hedef bytecode seviyesini, dependency’nin desteklediği Java sürümünü ve uygulamanın çalışacağı JRE’yi kontrol edin. Unsupported class file major version veya invalid source release gibi mesajlar repository bulunamadığını değil, Java derleme veya çalıştırma uyumsuzluğunu düşündürür. Gradle’ın resmî uyumluluk matrisi, kullanılan Gradle sürümünün hangi JVM’lerle çalıştığını ve toolchain yaklaşımının nasıl kullanılabileceğini gösterir. ([docs.gradle.org](https://docs.gradle.org/9.7.0/userguide/compatibility.html?utm_source=openai))
Gradle dependency hatalarında en hızlı ve güvenilir yaklaşım, koordinattan başlayıp Java sürümüne kadar her katmanı sırayla doğrulamaktır; böylece cache’i gereksiz yere silmeden ve repository ayarlarını rastgele değiştirmeden gerçek nedeni izole edebilirsiniz.