هل هناك طريقة لتقسيم/عوامل الأجزاء المشتركة من بنية Gradle
-
24-09-2019 - |
سؤال
لدينا العديد من المباني المستقلة (كل بناء مستقل هو بناء متعدد المشروع). تصبح البرامج النصية الرئيسية للبناء كبيرة جدًا حيث لدينا مجموعة من المهام الشائعة التي تم إعادة استخدامها بواسطة المشاريع الفرعية وكذلك هناك الكثير من التكرار بين التصميمات المستقلة. ما نبحث عنه هو:
- طريقة لتقسيم ملف الإنشاء الرئيسي إلى ملفات أصغر
- طريقة لإعادة استخدام بعض أجزاء البناء في بنيات مستقلة أخرى
ما هي أفضل طريقة لتحقيق ذلك في 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']()
في البرنامج النصي الخاص بك ، سيتصل بالفعل بالوظيفة وتعيين النتيجة إلى متغيرك
سيؤدي الأول إلى نفس القيمة التي يتم تعيينها عبر البرنامج النصي بينما قد يؤدي الأخير إلى قيم مختلفة (على سبيل المثال ، إذا دفع شخص ما إصدارًا آخر أثناء تشغيل البرنامج النصي).