Skip to content

Commit a812881

Browse files
committed
add menggunakan webjars spring
1 parent d3e05fe commit a812881

1 file changed

Lines changed: 111 additions & 0 deletions

File tree

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
---
2+
slug: menggunakan-webjars-spring
3+
title: Cara Terbaik Mengintegrasikan Library JavaScript dan CSS di Spring Boot Menggunakan WebJars
4+
authors: topekox
5+
tags: [spring, springboot, springmvc]
6+
---
7+
8+
Pengelolaan library frontend (seperti CSS frameworks, JavaScript libraries, atau font libraries) dalam ekosistem Java / Spring (khususnya Spring Boot MVC) sering kali menimbulkan beberapa masalah.
9+
10+
<!--truncate-->
11+
12+
## 1️⃣ Permasalahan
13+
14+
* **Manajemen Manual**: Pengembang harus mengunduh file `.css` dan `.js` secara manual dari situs web resmi library (misalnya, [jQuery.com](https://jquery.com/) atau [GetBootstrap.com](https://getbootstrap.com/)) dan menyimpannya di dalam folder `src/main/resources/static` atau `public`.
15+
* **Permasalahan Versioning**: Sulit untuk melacak versi library yang digunakan, dan pembaruan versi memerlukan penggantian file manual secara hati-hati di setiap project. Hal ini rentan terhadap kesalahan manusia (human error).
16+
* **Repositori Git yang Berat**: File biner atau file teks yang besar dari library pihak ketiga disimpan langsung di repositori Git, yang memperlambat operasi *clone* dan *fetch* serta mengotori riwayat *commit*.
17+
* **Ketergantungan CDN dan Akses Offline**: Bergantung pada CDN eksternal dapat menyebabkan kegagalan aplikasi jika koneksi internet terputus atau server CDN *down*, membuat aplikasi tidak dapat berjalan di lingkungan terisolasi (*intranet*).
18+
* **Inkonsistensi Build**: Proses build project Java tidak secara otomatis memvalidasi atau mengelola dependensi frontend, yang menyebabkan inkonsistensi antara lingkungan pengembangan lokal dan lingkungan produksi.
19+
20+
## 2️⃣ Pengenalan WebJars
21+
22+
**WebJars** adalah solusi untuk permasalahan di atas.
23+
24+
* WebJars adalah cara untuk mengemas library web sisi klien (seperti Bootstrap, jQuery, AngularJS, atau React) ke dalam file **JAR (Java Archive)**.
25+
* File JAR ini kemudian diterbitkan ke repositori standar **Maven Central**.
26+
* Dengan demikian, library frontend dapat dikelola layaknya dependensi Java biasa menggunakan alat manajemen dependensi seperti Maven (`pom.xml`) atau Gradle (`build.gradle`).
27+
28+
Setiap WebJar mengikuti struktur folder spesifik di dalam JAR: `META-INF/resources/webjars/artifact-id/version/file-path`.
29+
30+
## 3️⃣ Kenapa Harus Menggunakan WebJars
31+
32+
Alasan utama menggunakan WebJars adalah untuk mengadopsi praktik terbaik (**best practices**) manajemen dependensi Java ke dalam pengelolaan aset frontend:
33+
34+
* **Manajemen Dependensi Terpusat**: Menggunakan Maven/Gradle memungkinkan pengelolaan versi yang eksplisit dan terpusat. Pembaruan versi semudah mengubah satu baris kode di file konfigurasi build.
35+
* **Offline-Ready (Akses Offline)**: Aset dikirimkan bersama aplikasi dalam satu JAR, memastikan aplikasi berfungsi penuh bahkan tanpa koneksi internet atau di lingkungan jaringan yang aman/terisolasi.
36+
* **Integrasi Alat Build**: Alat manajemen dependensi Java menangani resolusi konflik versi secara otomatis dan menyediakan audit keamanan terpusat untuk semua dependensi, termasuk aset frontend.
37+
* **Struktur Project yang Rapi**: Menghilangkan kebutuhan untuk menyimpan file statis yang diunduh manual dari repositori Git, menjaga kebersihan dan keringkasan basis kode project.
38+
39+
## 4️⃣ WebJars dan Spring Boot
40+
41+
Spring Boot menyediakan dukungan kelas satu (*first-class support*) untuk WebJars, membuatnya sangat mudah diintegrasikan.
42+
43+
### A. Konfigurasi Dependensi
44+
45+
Spring Boot secara otomatis mengidentifikasi dan melayani aset yang ditemukan dalam path `/META-INF/resources/webjars/**`.
46+
47+
Untuk menambahkan WebJars, tambahkan dependensi di Maven (`pom.xml`):
48+
49+
```xml
50+
<!-- Core dependency untuk Spring Boot agar mengenali lokasi file tanpa nomor versi di URL -->
51+
<dependency>
52+
<groupId>org.webjars</groupId>
53+
<artifactId>webjars-locator-core</artifactId>
54+
</dependency>
55+
56+
<!-- Contoh Library: Bootstrap dan jQuery -->
57+
<dependency>
58+
<groupId>org.webjars</groupId>
59+
<artifactId>bootstrap</artifactId>
60+
<version>5.3.3</version>
61+
</dependency>
62+
<dependency>
63+
<groupId>org.webjars</groupId>
64+
<artifactId>jquery</artifactId>
65+
<version>3.7.1</version>
66+
</dependency>
67+
```
68+
69+
:::tip
70+
Anda dapat mencari daftar dependecy terbaru di https://mvnrepository.com/
71+
:::
72+
73+
### B. Penggunaan di HTML/Thymeleaf
74+
75+
Saat menggunakan Spring Boot dengan template engine seperti Thymeleaf, Anda dapat mereferensikan aset menggunakan path `/webjars/`:
76+
77+
```html
78+
<!DOCTYPE html>
79+
<html xmlns:th="http://www.thymeleaf.org">
80+
<head>
81+
<title>Demo WebJars Spring Boot</title>
82+
<!-- Referensi CSS Bootstrap -->
83+
<link rel="stylesheet" th:href="@{/webjars/bootstrap/css/bootstrap.min.css}" />
84+
</head>
85+
<body>
86+
87+
<h1>Halo, WebJars!</h1>
88+
89+
<!-- Referensi JavaScript jQuery dan Bootstrap -->
90+
<script th:src="@{/webjars/jquery/jquery.min.js}"></script>
91+
<script th:src="@{/webjars/bootstrap/js/bootstrap.min.js}"></script>
92+
</body>
93+
</html>
94+
```
95+
96+
:::info
97+
`webjars-locator-core` (yang ditambahkan pada konfigurasi di atas) memungkinkan Spring Boot secara otomatis menemukan versi yang benar dari aset (`5.3.3` atau `3.7.1`) tanpa harus menuliskannya secara eksplisit di URL HTML.
98+
:::
99+
100+
## 🔥 Kesimpulan
101+
102+
Menggunakan **WebJars** dalam pengembangan aplikasi dengan Spring Boot adalah praktik terbaik (**best practice**) yang mengubah cara kita mengelola aset frontend dari metode manual yang rentan kesalahan menjadi metode otomatis yang terstruktur.
103+
104+
Beberapa poin kunci yang dapat disimpulkan adalah:
105+
106+
* **Efisiensi Kerja**: WebJars menghilangkan proses "unduh dan tempel" manual, sehingga pengembang dapat lebih fokus pada penulisan kode daripada manajemen file aset.
107+
* **Standardisasi**: Dengan menggunakan Maven atau Gradle, seluruh tim pengembang menggunakan versi library yang seragam, menghindari masalah "jalan di tempat saya tapi tidak di tempat Anda" akibat perbedaan versi CSS atau JS.
108+
* **Keamanan & Keandalan**: Karena aset dibundel di dalam aplikasi, ketergantungan pada pihak ketiga (seperti CDN) hilang, sehingga aplikasi lebih stabil dan dapat dijalankan di mana saja (termasuk server internal tanpa internet).
109+
* **Integrasi Sempurna**: Spring Boot dirancang untuk bekerja secara harmonis dengan WebJars, memberikan kemudahan konfigurasi yang minimal namun berdampak besar pada kerapian struktur project.
110+
111+
Secara keseluruhan, WebJars adalah solusi yang **modern, bersih, dan sangat direkomendasikan** bagi programmer Java yang ingin mengelola siklus hidup library frontend dengan cara yang sama profesionalnya dengan mengelola library backend.

0 commit comments

Comments
 (0)