EMZETT.
Giriş yap

Maven ve Gradle: Java projelerini derlemek ve bağımlılıkları yönetmek

Kısaca: Maven ve Gradle, Java projelerinde derleme, test, paketleme ve kütüphane yönetimini üstlenir; Maven sabit kurallara ve XML’e, Gradle esnek betiklere dayanır.

Biraz daha ayrıntılı: Yalnızca javac ile işler çabuk karışır: düzinelerce sınıf, harici kütüphaneler (JAR’lar), testler, paketler. Derleme araçları süreci yeniden üretilebilir biçimde otomatikleştirir.

Ayrıntılı

Maven

pom.xml projeyi, bağımlılıkları ve eklentileri tanımlar. Yapılandırma yerine kural: kaynak kodu src/main/java içinde, testler src/test/java içinde.

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>de.example</groupId>
  <artifactId>gamecatalog</artifactId>
  <version>1.0.0</version>
  <properties><maven.compiler.release>21</maven.compiler.release></properties>
  <dependencies>
    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter</artifactId>
      <version>5.10.2</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

Komutlar: mvn compile, mvn test, mvn package (target/ içinde JAR), mvn clean install, mvn dependency:tree. Yaşam döngüsü: validate → compile → test → package → verify → install → deploy. Bağımlılıklar Maven Central’dan gelir; geçişli bağımlılıklar otomatik çekilir, scope (compile, test, runtime, provided) kullanımı denetler.

Gradle

build.gradle(.kts) (Groovy/Kotlin DSL): XML yerine betik, artımlı derlemeler ve derleme önbelleği (hızlı), Android için standart.

plugins { java; application }
repositories { mavenCentral() }
dependencies {
    implementation("com.google.guava:guava:33.0.0-jre")
    testImplementation("org.junit.jupiter:junit-jupiter:5.10.2")
}
java { toolchain { languageVersion = JavaLanguageVersion.of(21) } }
application { mainClass = "de.example.Main" }
tasks.test { useJUnitPlatform() }

Komutlar: ./gradlew build, ./gradlew test, ./gradlew run. Gradle wrapper (gradlew) uygun Gradle sürümünü indirir: her zaman birlikte ver. Yapılandırmalar: implementation (dışarıya görünmez), api, compileOnly, runtimeOnly, testImplementation.

Karşılaştırma

  • Maven: okuması kolay, çok yaygın, katı yapı, XML ayrıntılı; standart projeler, şirketler için iyi.
  • Gradle: daha esnek, büyük projelerde/çok modüllüde daha hızlı, daha dik öğrenme eğrisi, Android/Kotlin.
  • Ant (eski), Bazel (büyük monorepo’lar).
  • IDE desteği: IntelliJ/Eclipse/VS Code ikisini de içe aktarır.
  • Çok modüllü projeler (üst POM/settings.gradle).

Uygulama ve güvenlik

  • “En son” değil, sürümleri sabitle (BOM’lar, sürüm kataloğu).
  • Bağımlılıkları denetle: OWASP Dependency-Check, Dependabot, mvn versions:display-dependency-updates; Log4Shell tedarik zinciri riskini gösterdi.
  • Fat/uber JAR (Shade/Shadow, Spring Boot), java -jar ile başlatmak için tüm bağımlılıkları içerir.
  • CI: GitHub Actions’ta ./gradlew build/mvn -B verify.
  • Tipik hatalar: yanlış JDK sürümü (JAVA_HOME), bağımlılık çakışmaları (dependency:tree), eksik internet bağlantısı/proxy, bozuk önbellek (--refresh-dependencies).
  • Sınav: derleme araçlarının görevlerini açıkla (derlemek, test, bağımlılıklar, paketlemek, otomatikleştirmek).

Ayrıca bak: javac, CI/CD hattı