مكون Kotlin الإضافي والمكتبة: إنذار كاذب للإصدارات

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة: المثلث الأصفر المألوف

\n

هل سبق لك أن رأيت هذا التحذير في IntelliJ IDEA أو أثناء بناء Gradle؟ يظهر، فتتحقق من build.gradle.kts — وترى أن الإصدارات متطابقة. لكن IDE لا تزال تصر على إبراز المثلث الأصفر: "إصدار المكون الإضافي Kotlin ليس نفس إصدار المكتبة". هل هذا مألوف؟

\n

هذه واحدة من أكثر المشكلات شيوعًا على Stack Overflow (آلاف المشاهدات!). يبدو أن النظام قد أصيب بالجنون. لكن في الواقع، هناك سبب تقني محدد وراء ذلك. في هذه المقالة، لن نقوم فقط بإزالة التحذير المزعج، بل سنفهم أيضًا كيف يؤثر على تحسين وأداء مشروع Kotlin الخاص بك.

\n\n

جوهر المشكلة: لماذا يظهر التحذير إذا كانت الإصدارات متطابقة؟

\n

دعنا نحلل تشريح الخطأ. أنت تكتب في build.gradle.kts:

\n
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
\n

المشكلة هي أن Gradle قد يسحب تبعية عابرة بإصدار مختلف من Kotlin. على سبيل المثال، إذا كان مشروعك يستخدم مكتبة Fuel أو Ktor، فقد تسحب معها kotlin-stdlib:1.8.0. ونتيجة لذلك، يصبح في classpath إصداران مختلفان من نفس المكتبة.

\n

ترى IDE تعارضًا في الإصدارات بين المكون الإضافي (1.9.22) وإحدى المكتبات (1.8.0) — وتصدر تحذيرًا. وفي الوقت نفسه، قد يتم تجاوز التبعية الصريحة الخاصة بك kotlin("stdlib", "1.9.22") بواسطة التبعية العابرة.

\n\n

التشخيص: كيف تجد الجاني؟

\n

قبل العلاج، تحتاج إلى فهم من أين يأتي الإصدار القديم. استخدم أدوات Gradle المضمنة.

\n\n

الطريقة 1: مهمة Gradle dependencies

\n

قم بتشغيل في الطرفية:

\n
./gradlew dependencies --configuration runtimeClasspath
\n

في المخرجات، ابحث عن الأسطر التي تحتوي على kotlin-stdlib. سترى شيئًا مثل:

\n
+--- 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. لكن التحذير قد يظل قائمًا إذا كان المكون الإضافي يحلل الإصدارات الأصلية.

\n\n

الطريقة 2: IntelliJ IDEA — إعدادات الوحدة

\n

افتح File → Project Structure → Modules. اختر الوحدة الخاصة بك وانظر إلى علامة التبويب Dependencies. يتم عرض جميع التبعيات هناك، بما في ذلك التبعيات العابرة. إذا رأيت kotlin-stdlib:1.8.0 (أو إصدارًا آخر) — فهذا هو مصدر المشكلة.

\n\n

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

المدونات

توصيات الكتب