ما هو Hoplite ولماذا نحتاجه؟
Hoplite هي مكتبة خفيفة وآمنة من حيث الأنواع لتكوين تطبيقات Kotlin. إنها تحل مشكلة التحليل اليدوي لملفات التكوين (YAML, JSON, TOML, HOCON) وتحويلها إلى كائنات Kotlin ذات أنواع صارمة. بدلاً من كتابة عشرات الأسطر من التعليمات البرمجية لقراءة application.conf، يمكنك تعريف data-class، وسيقوم Hoplite بنفسه بإلغاء تسلسل التكوين مع التحقق من الصحة أثناء التنفيذ.
كيفية التثبيت
أضف التبعية في ملف build.gradle.kts:
repositories { mavenCentral()}
dependencies { implementation("com.sksamuel.hoplite:hoplite-core:2.7.5") implementation("com.sksamuel.hoplite:hoplite-yaml:2.7.5") // لـ YAML}الوظائف الرئيسية
- أمان الأنواع: تحويل تلقائي للسلاسل النصية إلى Int, Boolean, LocalDate, enum وكائنات متداخلة.
- التحقق من الصحة: تعليقات توضيحية مدمجة مثل
@Rangeو@Patternو@NotEmptyوأدوات تحقق مخصصة. - دعم الصيغ: YAML, JSON, TOML, HOCON, .properties ومتغيرات البيئة.
- الملفات الشخصية: التبديل بين تكوينات dev/prod دون تكرار التعليمات البرمجية.
- الأسرار: التكامل مع Vault ومتغيرات البيئة لكلمات المرور.
مثال على كود Kotlin
import com.sksamuel.hoplite.ConfigLoaderimport com.sksamuel.hoplite.yaml.YamlPropertySource
data class DatabaseConfig( val host: String, val port: Int = 5432, val credentials: Credentials)
data class Credentials( val username: String, @com.sksamuel.hoplite.validator.Secret val password: String)
fun main() { val config = ConfigLoader.Builder() .addSource(YamlPropertySource("config.yaml")) .build() .loadConfigOrThrow<DatabaseConfig>()
println("Connecting to ${config.host}:${config.port}") println("User: ${config.credentials.username}")}متى تستخدم
Hoplite مثالي لـ: الخدمات المصغرة على Ktor أو Spring Boot، أدوات سطر الأوامر التي تحتاج إلى أنواع صارمة، المشاريع التي تتطلب فصلًا إلى ملفات شخصية dev/staging/prod، وأي تطبيقات Kotlin حيث ترغب في تجنب ConfigFactory.parseResources() والتخطيط اليدوي. لا يُنصح به للنصوص البرمجية البسيطة التي تحتوي على معلمة أو اثنتين — فهنا يكفي System.getenv().
الخلاصة
Hoplite يجعل التكوين في Kotlin آمنًا وأنيقًا مثل اللغة نفسها. إذا كنت قد سئمت من ClassCastException عند قراءة التكوينات — جرب هذه المكتبة.