Cara Maven menyelesaikan dependensi transitif dari repositori


Tanggal publikasi:

Diperbarui:


Artikel teknis > Cara Maven menyelesaikan dependensi transitif dari repositori

Konteks 2026 dan penggunaan yang aman

Kesimpulan: Maven tidak mencari file JAR hanya berdasarkan nama. Maven menyelesaikan koordinat yang dideklarasikan, mengunduh POM artefak, mengikuti dependensi transitif, menerapkan aturan scope dan optional, lalu menggunakan mediasi versi ketika beberapa jalur meminta versi berbeda.

Yang akan Anda pelajari

  • Peran repository lokal, Maven Central, mirror, dan repository privat dalam proses resolusi.
  • Alasan POM dependensi—bukan file JAR itu sendiri—mendefinisikan sebagian besar dependensi transitif.
  • Cara memeriksa dependency graph sebelum memaksa versi tertentu.

Untuk siapa ini: Pengguna Maven yang ingin memahami asal artefak yang diunduh dan alasan library tambahan muncul dalam proyek.

Konteks 2026: Koordinat Apache POI lama berikut hanya digunakan sebagai contoh historis. Pilih dependensi yang masih didukung, gunakan repository HTTPS tepercaya, verifikasi checksum atau signature jika tersedia, dan terapkan kebijakan pembaruan dependensi.

Catatan keamanan: Contoh perintah dan konfigurasi dalam artikel asli belum dijalankan ulang dalam lingkungan produksi saat ini. Verifikasi versi yang didukung, cadangan, kendali akses, dan langkah rollback dalam lingkungan tes yang terpisah sebelum menerapkannya.

Sumber resmi utama

Ikhtisar

Maven mengunduh artefak dari repository dan menyimpannya di cache lokal. Artikel ini menjelaskan hubungan antara koordinat POM, repository, dan POM artefak dalam resolusi dependensi.

Jika konsep dasar Maven belum familier, baca terlebih dahulu artikel berikut.

Apa itu Apache Maven? POM, lifecycle, dan manajemen dependensi

Daftar isi

  1. Cara Maven menyelesaikan dependensi
  2. Ringkasan

1. Cara Maven menyelesaikan dependensi

Ketika dependensi dideklarasikan dalam pom.xml, Maven menyelesaikan koordinatnya, mengambil artefak dan POM terkait, lalu mengikuti dependensi transitif yang didefinisikan POM tersebut.

1-1. Koordinat dalam pom.xml

pom.xml mendefinisikan dependensi dengan groupId, artifactId, dan version. Contoh lama berikut meminta Apache POI 3.17, library untuk memproses dokumen Microsoft Office. Versi ini hanya dipertahankan agar sesuai dengan contoh asli.

pom.xml


<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.17</version>
</dependency>

Dari koordinat tersebut, Maven mengambil artefak POI dan POM-nya. POM itulah yang memberi tahu Maven tentang dependensi tambahan yang diperlukan.

1-2. Repository remote dan cache lokal

Diagram berikut memperlihatkan alur sederhananya.

Repositori Maven.

Jika tidak ada konfigurasi lain, Maven mencari artefak rilis di Maven Central.

https://repo1.maven.org/maven2/

Direktori berikut dapat membantu mencari koordinat artefak, tetapi bukan sumber kebijakan keamanan repository proyek Anda.

https://mvnrepository.com/repos

Pada permintaan pertama, Maven mengunduh artefak ke repository lokal. Permintaan berikutnya dapat menggunakan cache tersebut. Di Windows, lokasi default berada di bawah direktori pengguna, yaitu .m2\repository.

Repository tambahan dapat dideklarasikan seperti contoh berikut. Dalam proyek nyata, utamakan konfigurasi terpusat, HTTPS, autentikasi yang aman, dan sumber artefak tepercaya.

pom.xml


<repositories>
    <repository>
        <id>sonatype-nexus-snapshots</id>
        <name>Sonatype Nexus Snapshots</name>
        <url>https://oss.sonatype.org/content/repositories/snapshots</url>
        <releases>
            <enabled>false</enabled>
        </releases>
        <snapshots>
        </snapshots>
    </repository>
</repositories>

1-3. Dependensi transitif dari POM artefak

Pada contoh ini, POI 3.17 membutuhkan commons-collections4 4.1. Informasi tersebut tidak dibaca dari nama file JAR, melainkan dari POM POI yang tersimpan di repository pada lokasi berikut.

https://repo1.maven.org/maven2/org/apache/poi/poi/3.17/

Maven membaca poi-3.17.pom, menemukan dependensi commons-collections4, lalu menyelesaikan koordinat dependensi tersebut. Scope, optional, exclusion, dan mediasi versi menentukan hasil akhir dependency graph.

2. Ringkasan

Maven menyelesaikan koordinat yang dideklarasikan, mengambil artefak beserta POM-nya, dan mengikuti dependensi transitif. Periksa dependency tree dan effective POM sebelum mengganti versi atau menambahkan exclusion.