هل هناك طريقة لتقسيم/عوامل الأجزاء المشتركة من بنية Gradle

StackOverflow https://stackoverflow.com/questions/2566685

  •  24-09-2019
  •  | 
  •  

سؤال

لدينا العديد من المباني المستقلة (كل بناء مستقل هو بناء متعدد المشروع). تصبح البرامج النصية الرئيسية للبناء كبيرة جدًا حيث لدينا مجموعة من المهام الشائعة التي تم إعادة استخدامها بواسطة المشاريع الفرعية وكذلك هناك الكثير من التكرار بين التصميمات المستقلة. ما نبحث عنه هو:

  1. طريقة لتقسيم ملف الإنشاء الرئيسي إلى ملفات أصغر
  2. طريقة لإعادة استخدام بعض أجزاء البناء في بنيات مستقلة أخرى

ما هي أفضل طريقة لتحقيق ذلك في Gradle؟

هل كانت مفيدة؟

المحلول

تتيح لك Gradle 0.9 استيراد برنامج نصي بناء من برنامج نصي إنشاء آخر. القي نظرة على: تكوين المشروع باستخدام البرنامج النصي الخارجي للبناء. في الأساس apply from: 'other.gradle'.

شيء واحد لا يذكره دليل المستخدم هو أن المعلمة "من" يمكن أن تكون عنوان URL ، بحيث يمكنك إتاحة البرامج النصية المشتركة عبر HTTP في مكان ما (على سبيل المثال مستودع التخريب الخاص بك) ، واستيرادها من بنيات متعددة.

نصائح أخرى

الحل الذي وجدته يعني تعيين الأشياء التي لديك في other.gradle ملف.

def getVersionName = { ->
    def stdout = new ByteArrayOutputStream()
    exec {
        commandLine 'git', 'describe', '--tags'
        standardOutput = stdout
    }
    return stdout.toString().trim()
}
ext{
    VERConsts = [:]
    VERConsts['NAME'] = getVersionName()
    VERConsts['NAME_CALL'] = getVersionName
}

ثم في الخاص بك build.gradle ملف:

apply from: 'other.gradle'
// ...
android {
    defaultConfig {
        versionName VERConsts['NAME_CALL']()
        // or
        versionName VERConsts['NAME']
    }
}

ثم ، و versionName سوف يكون نتيجة المكالمة.

ملحوظات:

  • VERConsts['NAME'] = getVersionName() سوف يتصل getVersionName() وتخزين النتيجة. استخدامه في البرنامج النصي على سبيل المثال versionName VERConsts['NAME'] سيتم تعيين القيمة المخزنة بعد ذلك.
  • VERConsts['NAME_CALL'] سيتم بدلاً من ذلك تخزين إشارة إلى الوظيفة. استخدام VERConsts['NAME_CALL']() في البرنامج النصي الخاص بك ، سيتصل بالفعل بالوظيفة وتعيين النتيجة إلى متغيرك

سيؤدي الأول إلى نفس القيمة التي يتم تعيينها عبر البرنامج النصي بينما قد يؤدي الأخير إلى قيم مختلفة (على سبيل المثال ، إذا دفع شخص ما إصدارًا آخر أثناء تشغيل البرنامج النصي).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top