مقدمة: المثلث الأصفر المألوف
\nهل سبق لك أن رأيت هذا التحذير في IntelliJ IDEA أو أثناء بناء Gradle؟ يظهر، فتتحقق من build.gradle.kts — وترى أن الإصدارات متطابقة. لكن IDE لا تزال تصر على إبراز المثلث الأصفر: "إصدار المكون الإضافي Kotlin ليس نفس إصدار المكتبة". هل هذا مألوف؟
هذه واحدة من أكثر المشكلات شيوعًا على Stack Overflow (آلاف المشاهدات!). يبدو أن النظام قد أصيب بالجنون. لكن في الواقع، هناك سبب تقني محدد وراء ذلك. في هذه المقالة، لن نقوم فقط بإزالة التحذير المزعج، بل سنفهم أيضًا كيف يؤثر على تحسين وأداء مشروع Kotlin الخاص بك.
\n\nجوهر المشكلة: لماذا يظهر التحذير إذا كانت الإصدارات متطابقة؟
\nدعنا نحلل تشريح الخطأ. أنت تكتب في build.gradle.kts:
plugins {\n kotlin("jvm") version "1.9.22" apply false\n}\n\n// في قسم dependencies:\nimplementation(kotlin("stdlib", "1.9.22"))\n\nيبدو كل شيء صحيحًا. لكن Gradle يرى قطعتين مختلفتين:
\n- \n
- مكون Kotlin الإضافي لـ Gradle — الإصدار 1.9.22 (يدير التجميع) \n
- مكتبة Kotlin Stdlib — الإصدار 1.9.22 (مكتبة وقت التشغيل) \n
المشكلة هي أن Gradle قد يسحب تبعية عابرة بإصدار مختلف من Kotlin. على سبيل المثال، إذا كان مشروعك يستخدم مكتبة Fuel أو Ktor، فقد تسحب معها kotlin-stdlib:1.8.0. ونتيجة لذلك، يصبح في classpath إصداران مختلفان من نفس المكتبة.
ترى IDE تعارضًا في الإصدارات بين المكون الإضافي (1.9.22) وإحدى المكتبات (1.8.0) — وتصدر تحذيرًا. وفي الوقت نفسه، قد يتم تجاوز التبعية الصريحة الخاصة بك kotlin("stdlib", "1.9.22") بواسطة التبعية العابرة.
التشخيص: كيف تجد الجاني؟
\nقبل العلاج، تحتاج إلى فهم من أين يأتي الإصدار القديم. استخدم أدوات Gradle المضمنة.
\n\nالطريقة 1: مهمة Gradle dependencies
\nقم بتشغيل في الطرفية:
\n./gradlew dependencies --configuration runtimeClasspath\nفي المخرجات، ابحث عن الأسطر التي تحتوي على kotlin-stdlib. سترى شيئًا مثل:
+--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22\n| \\--- org.jetbrains.kotlin:kotlin-stdlib-common:1.9.22\n+--- com.example:some-library:2.0.0\n| \\--- org.jetbrains.kotlin:kotlin-stdlib:1.8.0 -> 1.9.22\n\nيظهر السهم -> أن Gradle حل التعارض لصالح الإصدار 1.9.22. لكن التحذير قد يظل قائمًا إذا كان المكون الإضافي يحلل الإصدارات الأصلية.
الطريقة 2: IntelliJ IDEA — إعدادات الوحدة
\nافتح File → Project Structure → Modules. اختر الوحدة الخاصة بك وانظر إلى علامة التبويب Dependencies. يتم عرض جميع التبعيات هناك، بما في ذلك التبعيات العابرة. إذا رأيت kotlin-stdlib:1.8.0 (أو إصدارًا آخر) — فهذا هو مصدر المشكلة.
4 طرق لإصلاح التحذير (وزيادة الأداء)
\nالآن ننتقل إلى الجزء الأكثر إثارة للاهتمام — الحلول. كل طريقة تؤثر على تحسين البناء وأداء وقت التشغيل.
\n\nالطريقة 1: المحاذاة القسرية للإصدارات (Alignment)
\nالنهج الأكثر صحة هو استخدام Kotlin BOM (قائمة المواد). هذا يضمن أن جميع تبعيات Kotlin ستكون من إصدار واحد.
\n// build.gradle.kts\ndependencies {\n implementation(platform("org.jetbrains.kotlin:kotlin-bom:1.9.22"))\n implementation("org.jetbrains.kotlin:kotlin-stdlib")\n // الآن ليس من الضروري تحديد الإصدار — يتم أخذه من BOM\n}\n\nلماذا هذا جيد للأداء؟ BOM يزيل تكرار الفئات في classpath. إذا كان لديك إصداران من kotlin-stdlib
المدونات
توصيات الكتب
اقرأ أيضًا