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 -jarile 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ı