Perbedaan antara konfigurasi kompilasi dan runtime di Gradle

102

Pertanyaan saya agak umum, tetapi ini juga terkait dengan Gradle.

Mengapa kita membutuhkan konfigurasi kompilasi dan runtime?

Ketika saya mengkompilasi sesuatu yang saya butuhkan artefak untuk mengubah kelas java saya di bytecode jadi saya perlu mengkompilasi konfigurasi, tetapi mengapa konfigurasi runtime diperlukan apakah saya memerlukan sesuatu yang lain untuk menjalankan aplikasi saya di JVM?

Maaf jika kedengarannya bodoh, tapi saya tidak mengerti.

Xelian
sumber

Jawaban:

149

Dalam kasus yang paling umum, artefak yang diperlukan pada waktu kompilasi adalah subset dari yang diperlukan pada waktu proses. Misalnya, program yang disebut appmenggunakan pustaka foo, dan pustaka secara foo internal menggunakan pustaka bar. Maka hanya foodiperlukan untuk mengkompilasi app, namun kedua foodan bardiperlukan untuk menjalankannya. Inilah sebabnya mengapa secara default, semua yang Anda letakkan di compilekonfigurasi Gradle juga terlihat di runtimekonfigurasinya, tetapi kebalikannya tidak benar.

Peter Niederwieser
sumber
20
Sayang ini tidak disebutkan secara eksplisit di gradle.org/docs/current/userguide/dependency_management.html . Mereka menggunakan kompilasi dan runtime tanpa menyatakan secara eksplisit artinya ...
silasdavis
2
@silasdavis Dalam dokumentasi menjelaskan perbedaannya: gradle.org/docs/current/userguide/… di 8.3. Konfigurasi ketergantungan
angelcervera
@angelcervera Ah begitu, 8. Dasar-dasar Manajemen Ketergantungan, dan 51. Manajemen Ketergantungan. Saya dapat melihat mengapa mereka memiliki dua bagian, tetapi mungkin akan lebih baik jika yang terakhir merujuk pada yang pertama. Saya pikir saya mendarat di 51 dan mengharapkannya memberikan akun penuh.
silasdavis
@sayangkoeh Hal yang sama untuk bagian lain dalam dokumentasi. Saya harus mengambil waktu luang yang sama untuk membaca semua dokumentasi dari A sampai Z.
angelcervera
1
@Peter Niederwieser Jika tugas kompilasi menunjukkan dependensi yang sama seperti runtime, dalam skenario apa Anda akan menggunakan runtime sebagai lawan dari kompilasi?
rj2700