Topik ini menyiapkan lingkungan kerja Clojure dari awal: pemeriksaan Java 21 sebagai fondasi eksekusi, pemasangan Clojure CLI, perkenalan berkas deps.edn sebagai konfigurasi proyek, dan penghubung editor ke REPL. Urutannya berlapis karena setiap pemeriksaan bergantung pada keberhasilan langkah sebelumnya. Setiap langkah yang dapat dijalankan disertai perintah beserta keluaran aslinya, sehingga keadaan lingkungan yang diharapkan pada akhir topik tergambar dengan pasti.
Memeriksa Java#
Clojure mengeksekusi kode di atas JVM, sehingga pemeriksaan pertama diarahkan pada Java yang terpasang. Jalur ini menargetkan Java 21, yaitu rilis dengan dukungan jangka panjang, dan distribusi OpenJDK apa pun pada versi tersebut memenuhi syarat. Pemeriksaan dilakukan dengan memanggil java beserta opsi –version pada terminal, dan cara memasang Java mengikuti sistem operasi masing-masing, misalnya melalui paket openjdk-21 pada distribusi Linux atau pengunduh resmi pada Windows dan macOS.
# tampilkan versi Java yang terpasang
java --versionopenjdk 21.0.13 2026-10-20
OpenJDK Runtime Environment (build 21.0.13+9-1-deb13u2-Debian)
OpenJDK 64-Bit Server VM (build 21.0.13+9-1-deb13u2-Debian, mixed mode, sharing)Baris pertama keluaran memuat versi 21.0.13, sedangkan dua baris berikutnya menunjukkan komponen yang menyediakan JVM, yaitu lingkungan runtime dan mesin virtual server. Bila beberapa versi Java terpasang pada satu komputer, pastikan versi yang dipanggil pada sesi terminal adalah versi 21, karena perintah java mengikuti konfigurasi PATH sesi tersebut. Bila perintah berjalan lancar dan versinya berawalan 21, fondasi sudah siap dan pemasangan Clojure dapat dilanjutkan.
Memasang Clojure CLI#
Clojure CLI adalah alat baris perintah yang membaca deps.edn, mengunduh dependensi dari repositori Maven, menyusun classpath, yaitu daftar lokasi kode dan pustaka yang dicari JVM, lalu memulai REPL atau menjalankan program. Pemasangan resmi pada Linux menggunakan skrip linux-install.sh yang diterbitkan pada halaman rilis resmi Clojure. Blok berikut tidak dijalankan pada pembahasan ini karena prosesnya mengunduh berkas dari jaringan, tetapi perintahnya dicantumkan utuh agar dapat diikuti pada komputer yang sedang disiapkan.
# tidak-dijalankan
# unduh skrip pemasang resmi dari halaman rilis Clojure
curl -L -O https://github.com/clojure/brew-install/releases/latest/download/linux-install.sh
# beri izin eksekusi, lalu jalankan pemasang dengan hak akses administrator
chmod +x linux-install.sh
sudo ./linux-install.shPemasang menempatkan dua perintah pada PATH. Perintah clojure menjalankan program dan mengevaluasi ekspresi, sedangkan perintah clj adalah pembungkus REPL yang menambahkan riwayat pengetikan melalui rlwrap. Apabila perintah clojure masih belum dikenali sesudah pemasangan, buka sesi terminal yang segar agar lokasi yang baru terbaca.
Memeriksa Clojure CLI#
Setelah terpasang, versi CLI diperiksa dengan opsi –version. Perintah ini hanya mencetak versi lalu segera kembali, tanpa memulai REPL dan tanpa membaca proyek mana pun, sehingga aman digunakan sebagai uji cepat pertama.
# tampilkan versi Clojure CLI yang terpasang
clojure --versionClojure CLI version 1.12.6.1673Keluaran menunjukkan versi pemasang 1.12.6.1673, yang membawa Clojure 1.12.6 sebagai bahasanya. Penomoran CLI memuat nomor build tersendiri karena alat pemasang dan bahasanya dirilis secara terpisah. Satu baris keluaran ini padat makna karena untuk mencetaknya, CLI harus ditemukan pada PATH, CLI harus menemukan Java, dan JVM harus berhasil dimulai. Dengan demikian, pemeriksaan ini membuktikan tiga lapisan sekaligus, yaitu lokasi perintah, lingkungan Java, dan proses Clojure itu sendiri.
Di samping clojure, pemasang juga menempatkan perintah clj yang digunakan ketika sesi REPL interaktif dimulai pada terminal. Untuk menjalankan berkas dan mengevaluasi ekspresi, perintah clojure saja sudah cukup, dan itulah yang digunakan pada contoh-contoh berikutnya. Selama keluaran serupa muncul, CLI siap digunakan dan ekspresi pertama dapat dievaluasi.
Evaluasi ekspresi pertama#
Opsi -e mengevaluasi form yang mengikutinya lalu mengakhiri sesi, sehingga satu ekspresi dapat diuji langsung dari terminal tanpa berkas dan tanpa REPL interaktif. Gabungan -M dan -e memilih mode main, mode yang menjalankan program, lalu mengirimkan form pada evaluasi.
# evaluasi satu form println
clojure -M -e '(println "halo, Clojure")'halo, ClojureTanda kutip tunggal pada perintah di atas berasal dari shell, bukan dari Clojure. Shell meneruskan isi tanda kutip tunggal apa adanya kepada CLI, sedangkan tanda kutip ganda di dalamnya menandai string pada bahasa Clojure. Perintah ini melalui tiga lapisan yang sama dengan program sesungguhnya, yaitu shell memanggil CLI, CLI menyusun classpath, dan JVM mengevaluasi form. Perbedaannya hanya terletak pada sumber form, yaitu satu ekspresi dari baris perintah alih-alih berkas. Apabila form menghasilkan nilai tanpa mencetak apa pun, mode -e tetap tidak menampilkannya, sehingga keluaran yang terlihat berasal dari println. Perilaku yang berbeda dimiliki REPL interaktif, yang selalu mencetak nilai setiap form.
Berkas deps.edn#
Setiap proyek Clojure dikenali CLI melalui berkas deps.edn yang berada di akar direktorinya. Berkas ini ditulis dalam EDN (Extensible Data Notation), notasi data yang sama dengan literal data pada Clojure, sehingga konfigurasi pun berupa data dan bukan sintaks khusus. Tiga kunci yang paling sering digunakan adalah :paths untuk daftar folder sumber, :deps untuk dependensi beserta versinya, dan :aliases untuk varian pemanggilan.
; tidak-dijalankan
; berkas konfigurasi proyek dalam format EDN
{:paths ["src"]
:deps {org.clojure/clojure {:mvn/version "1.12.0"}}
:aliases
{:dev {:extra-paths ["dev"]}}}Contoh di atas menjadikan folder src sebagai sumber utama, mendeklarasikan Clojure 1.12.0 dari repositori Maven, dan menambahkan alias dev yang ikut menyertakan folder dev bila dipanggil dengan clojure -M:dev. CLI membaca berkas ini setiap kali dipanggil dari dalam direktori proyek, dan kelak berkas yang sama memuat dependensi pihak ketiga ketika proyek berkembang. Berkas ini juga menjadi titik temu antara CLI dan editor, karena Calva maupun CIDER membaca deps.edn yang sama ketika memulai REPL, sehingga classpath yang digunakan editor sama dengan classpath yang digunakan perintah terminal. Kesamaan ini mencegah kasus program berjalan lancar pada terminal tetapi gagal pada editor karena daftar pustakanya berbeda. Untuk tahap awal, satu hal penting sudah tercapai: seluruh pengaturan proyek berada pada satu berkas data yang dapat dibaca dan disunting seperti data Clojure lainnya.
Editor yang terhubung ke REPL#
Pekerjaan sehari-hari dengan Clojure berlangsung pada editor yang terhubung ke REPL yang berjalan terus: form yang ditulis dikirim ke REPL, hasilnya muncul di tempat, lalu form berikutnya disusun dari hasil tersebut. Dua penghubung yang paling banyak digunakan adalah Calva pada VS Code dan CIDER pada Emacs.
Calva bekerja tanpa konfigurasi untuk proyek deps.edn. Perintah Start a Project REPL and Connect, yang diakses dengan Ctrl+Alt+C lalu Ctrl+Alt+J, membaca deps.edn, memulai REPL, dan menyambungkannya ke jendela suntingan. Istilah Calva untuk langkah ini adalah jack-in, yaitu memulai REPL dan menyambungkan editor dalam satu langkah. Bila proyek menggunakan tata letak yang tidak lazim, urutan koneksi dapat didefinisikan pada settings.json.
// tidak-dijalankan
// konfigurasi opsional Calva untuk proyek deps.edn
{
"calva.replConnectSequences": [
{
"name": "Proyek latihan",
"projectType": "deps.edn"
}
]
}CIDER dipasang sebagai paket pada konfigurasi Emacs, kemudian dijalankan dengan perintah cider-jack-in-clj. Evaluasi form pada CIDER dilakukan dengan C-x C-e pada form yang ditunjuk kursor, dan hasilnya muncul pada jendela REPL.
; tidak-dijalankan
; pasang CIDER pada konfigurasi Emacs
(use-package cider
:ensure t)Kesalahan umum#
Tiga bentuk error berikut paling sering muncul pada penyiapan pertama, dan semuanya berkaitan dengan lingkungan terminal alih-alih dengan kode Clojure.
- Perintah clojure tidak ditemukan sesudah pemasangan, yang tampak sebagai
clojure: command not found. Penyebabnya, sesi terminal yang sedang digunakan belum memuat lokasi pemasangan yang baru. Buka sesi terminal yang segar, atau muat ulang berkas lingkungan dengan source, lalu ulangi pemeriksaan versi. - Menjalankan berkas tanpa -M, misalnya
clojure berkas.clj. Program tetap berjalan, tetapi CLI mencetakWARNING: Implicit use of clojure.main with options is deprecated, use -M berkas.clj. Selalu sertakan -M ketika berkas dieksekusi agar perintah mengikuti bentuk yang didukung penuh. - Menghilangkan tanda kutip tunggal pada argumen -e. Tanpa kutip tunggal, shell menafsirkan tanda kurung sendiri dan menjawab dengan pesan semacam
syntax error near unexpected token '('sebelum Clojure sempat berjalan. Bungkus form dalam kutip tunggal agar shell meneruskannya utuh kepada CLI.
Ringkasan#
- Java diverifikasi dengan
java --versionsebelum apa pun, karena Clojure mengeksekusi kode sebagai bytecode di atas JVM. - Clojure CLI dipasang melalui skrip resmi linux-install.sh dan diverifikasi dengan
clojure --version. Versi CLI 1.12.6.1673 membawa Clojure 1.12.6. - Proyek didefinisikan oleh deps.edn dalam format EDN melalui kunci :paths, :deps, dan :aliases.
- Calva dan CIDER menyambungkan editor ke REPL yang menyala terus melalui jack-in, dan itulah cara kerja sehari-hari dengan Clojure.
Referensi#
- Installing Clojure — Clojure — Panduan resmi pemasangan Clojure CLI pada Linux, macOS, dan Windows, termasuk skrip linux-install.sh.
- REPL and main — Clojure — Referensi mode -M dan opsi -e yang digunakan pada evaluasi ekspresi pertama.
- Java SE 21 Documentation — Oracle — Dokumentasi resmi Java 21 yang menjadi fondasi eksekusi jalur ini.
- Calva User Guide — Calva — Panduan Calva pada VS Code, termasuk jack-in dan urutan koneksi REPL.
- CIDER Documentation — CIDER — Dokumentasi CIDER pada Emacs, termasuk cider-jack-in-clj.