java - لماذا استخدام Gradle بدلاً من Ant أو Maven؟




build-process (9)

ما الذي يجعلني أداة إنشاء أخرى مستهدفة في Java حقًا؟

إذا كنت تستخدم Gradle على أداة أخرى ، فلماذا؟


Answers

استغل Gradle المتعة في بناء / تجميع البرامج. اعتدت النملة على بناء برنامج حياتي المهنية بالكامل واعتبرت دائما أن الجزء الفعلي "buildit" من عمل dev هو شر ضروري. قبل بضعة أشهر ، سئمت شركتنا من عدم استخدام الريبو الثنائي (المعروف أيضا باسم التدقيق في الجرار إلى vcs) ، وأعطيت المهمة للتحقيق في ذلك. بدأت مع اللبلاب لأنها يمكن أن تكون مثبتة على قمة النمل ، لم يكن لديك الكثير من الحظ الحصول على التحف المبنية المنشورة كما أردت. ذهبت إلى maven واختراقها مع xml ، عملت رائعة لبعض libs المساعد بسيطة ولكن واجهت مشاكل خطيرة في محاولة لتعبئة التطبيقات جاهزة للنشر. تعامل مع بعض الإضافات googling ومنتديات القراءة وجرح تحميل تريليونات من الجرار دعم لمكونات مختلفة والتي كان لي وقتا عصيبا باستخدام. وأخيراً ذهبت إلى الممر (الحصول على مرارة جداً في هذه المرحلة ، وأزعجني أنه "لا ينبغي أن يكون هذا صعبًا!")

لكن من اليوم الأول بدأ مزاجي في التحسن. كنت أذهب إلى مكان ما أخذني ساعتين لترحيل وحدتي النملة الأولى وكان ملف البناء لا شيء في الأساس. من السهل تركيب شاشة واحدة. كان "نجاح باهر" كبير: بناء البرامج النصية في XML ، كيف غبي هو ذلك؟ حقيقة أن إعلان تبعية واحدة تأخذ صفًا واحدًا جذابًا للغاية بالنسبة لي -> يمكنك بسهولة مشاهدة جميع التبعيات لمشروع معين على صفحة واحدة. ومنذ ذلك الحين ، كنت على أساس دائم ، لكل مشكلة واجهتها حتى الآن ، هناك حل بسيط وأنيق. أعتقد أن هذه هي الأسباب:

  • groovy بديهية جدا لمطوري جافا
  • وثائق رائع رائع
  • المرونة لا حصر لها

الآن أقضي أيامي أحاول التفكير في ميزات جديدة لإضافتها إلى عملية الإنشاء. كم هو مريض؟


يمكن استخدام Gradle لأغراض كثيرة - فهو سكين أفضل من الجيش السويسري بكثير من Ant - ولكنه يركز بشكل خاص على بنى متعددة المشاريع.

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

لدى Gradle مرحلتان متميزتان: التقييم والتنفيذ. بشكل أساسي ، أثناء التقييم سيبحث Gradle عن نصوص بناء في الدلائل التي من المفترض أن يبحث عنها وتقييمها. أثناء التنفيذ ، سيقوم Gradle بتنفيذ المهام التي تم تحميلها أثناء التقييم مع الأخذ بعين الاعتبار التبعيات بين المهام.

في أعلى هذه الميزات البرمجية للتبعية يضيف Gradle المشروع وميزات تبعية JAR عن طريق intergration مع Apache Ivy. كما تعلمون Ivy هو أداة إدارة التبعية أكثر قوة وأقل بكثير من رأي Maven.

يكتشف Gradle التبعيات بين المشاريع وبين المشاريع و JARs. يعمل Gradle مع مستودعات Maven (التنزيل والتحميل) مثل iBiblio واحد أو المستودعات الخاصة بك ولكن أيضا يدعم والبنية التحتية لمستودع التخزين الأخرى التي قد تكون لديك.

في المشاريع متعددة المشاريع ، فإن Gradle قابل للتكيف والتكيف مع بنية البناء والهندسة المعمارية. لا يلزمك تكييف البنية أو البنية الخاصة بك مع أداة البناء الخاصة بك كما ستكون مطلوبة مع Maven.

يحاول غراغ جاهداً ألا يدخل في طريقك ، وهو جهد لا يصنعه مي Mن أبداً. الاتفاقية جيدة ولكن المرونة كذلك. يعطيك Gradle العديد من الميزات أكثر من Maven ، ولكن الأهم في العديد من الحالات أن Gradle سوف يوفر لك مسار انتقال غير مؤلم بعيدًا عن Maven.


يجمع Gradle بشكل رائع بين Ant و Maven ، مع الأخذ الأفضل من كلا الإطارين. المرونة من Ant والاتفاقية على التكوين ، وإدارة التبعية والمكونات الإضافية من Maven.

لذلك إذا كنت ترغب في إنشاء بنية جافا قياسية ، كما هو الحال في maven ، ولكن مهمة الاختبار يجب أن تقوم ببعض الخطوات المخصصة يمكن أن تبدو كما يلي.

build.gradle:

apply plugin:'java'
task test{
  doFirst{
    ant.copy(toDir:'build/test-classes'){fileset dir:'src/test/extra-resources'}
  }
  doLast{
    ...
  }
}

على رأس ذلك يستخدم بناء الجملة groovy الذي يعطي قوة تعبير أكثر بكثير ثم xml النمل / maven.

وهي مجموعة متميزة من النملة - يمكنك استخدام جميع المهام النمل في غراظ مع بناء أجمل ، مثل groovy ، أي.

ant.copy(file:'a.txt', toDir:"xyz")

أو

ant.with{
  delete "x.txt"
  mkdir "abc"
  copy file:"a.txt", toDir: "abc"
}

أنا لا أستخدم Gradle في الغضب بنفسي (فقط مشروع لعبة حتى الآن) [يعني المؤلف أنهم استخدموا Gradle في مشروع لعبة فقط حتى الآن ، وليس أن Gradle هو مشروع لعبة - انظر التعليقات] ، لكنني أقول ذلك الأسباب التي يمكن للمرء أن يفكر في استخدامها هو بسبب إحباطات النمل و Maven.

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

يأخذ Maven النهج المعاكس ويتوقع منك أن تتكامل تمامًا مع دورة حياة Maven. يجد مستخدمو Ant المتمرّسون هذا التنافر بشكل خاص حيث يزيل Maven العديد من الحريات الموجودة في Ant. على سبيل المثال ، هناك مدونة Sonatype تعدد العديد من انتقادات Maven وردودها.

تتيح آلية Maven للمكونات الإضافية تكوينات بنية قوية للغاية ، ويعني نموذج الوراثة أنه يمكنك تحديد مجموعة صغيرة من POMs الأصلية التي تغلف تكوينات البنية الخاصة بك للمؤسسة بأكملها ويمكن للمشروعات الفردية أن ترث هذه التكوينات ، مما يجعلها خفيفة الوزن. تكوين Maven مطول جداً (على الرغم من أن Maven 3 يعد بمواجهة هذا) ، وإذا كنت تريد أن تفعل أي شيء "ليس طريقة Maven" ، عليك كتابة ملحق أو استخدام تكامل Ant Antag. لاحظ أنني أحب كتابة ملحقات Maven ولكن أقدر أن يعترض الكثير على الجهد المبذول.

يعد Gradle بالضربة القاضية بين Ant و Maven. ويستخدم نهج Ivy لقرار التبعية. يسمح بالتوافق على التكوين ولكن يشمل أيضًا مهام Ant كمواطنين من الدرجة الأولى. كما يتيح لك بحكمة استخدام مستودعات Maven / Ivy الحالية.

إذا قمت بالضرب مع أي من نقاط الألم في Ant / Maven ، فمن المحتمل أنك تستحق المحاولة ، على الرغم من أنه في رأيي يبقى أن نرى ما إذا كنت لن تتاجر فقط بمشاكل معروفة لأشياء غير معروفة. دليل البودنغ هو في الأكل على الرغم من ذلك سأحتفظ بالحكم حتى يصبح المنتج أكثر نضجًا وبعضنا الآخر قد استوعب أي مكامن الخلل (يسمونه نزيف الحافة لسبب ما). ما زلت أستخدمها في مشاريع الألعاب الخاصة بي ، لكن من الجيد دائمًا أن تكون على دراية بالخيارات.


قد يكون هذا مثيرًا للجدل بعض الشيء ، إلا أن Gradle لا يخفي حقيقة أنه لغة برمجة مكتملة.

Ant + ant-contrib هي في الأساس لغة برمجة كاملة مكتملة لا يرغب أحد في البرمجة بها.

يحاول ميفن اتخاذ النهج المعاكس في محاولة التصريح بشكل كامل وإجبارك على كتابة وتجميع ملحق إذا كنت بحاجة إلى المنطق. كما يفرض نموذج مشروع غير مرن تمامًا. يجمع Gradle بين أفضل هذه الأدوات:

  • وهو يتبع التقليد over-configuration (ala Maven) ولكن فقط بالقدر الذي تريده
  • فإنه يتيح لك كتابة مهام مخصصة مرنة مثل في النملة
  • يوفر دعم مشروع متعدد الوحدات يتفوق على كل من Ant و Maven
  • يحتوي على DSL يجعل الأشياء 80٪ سهلة و 20٪ أشياء ممكنة (على عكس أدوات البناء الأخرى التي تجعل 80٪ سهلة ، 10٪ ممكن و 10٪ مستحيل بشكل فعال).

Gradle هو أداة البناء الأكثر تهيئًا ومرونة التي لم أستخدمها بعد. يتطلب الأمر بعض الاستثمار مقدمًا لتعلم DSL ومفاهيم مثل التهيئات ، ولكن إذا كنت بحاجة إلى أداة إنشاء JVM غير مهيأة تمامًا ومصممة تمامًا ، فمن الصعب الفوز عليها.


هذا ليس جوابي ، لكنه بالتأكيد يتردد صداه معي. إنه من رادار تكنولوجيا ThoughtWorks من أكتوبر 2012 :

لقد تسبب شيئان في إرهاق أدوات البناء القائمة على XML مثل Ant و Maven: الكثير من الأقواس المقوسة الغاضبة ، وخشونة معمارية المكونات. وبينما يمكن التعامل مع قضايا التركيب اللغوي من خلال التوليد ، فإن معماريات المكونات الإضافية تحد بشدة من قدرة أدوات البناء على النمو بأمان كلما أصبحت المشاريع أكثر تعقيدًا. لقد أصبحنا نشعر أن المكونات الإضافية هي المستوى الخاطئ في التجريد ، وتفضل استخدام الأدوات القائمة على اللغة مثل Gradle و Rake بدلاً من ذلك ، لأنها توفر تجريدات أكثر دقة وأكثر مرونة على المدى الطويل.


نحن نستخدم Gradle واختارها على Maven و Ant. أعطتنا النمل مرونة كاملة ، و Ivy يعطي إدارة تبعية أفضل من Maven ، ولكن ليس هناك دعم كبير للبنى متعددة المشاريع. ينتهي بك الأمر القيام بالكثير من الترميز لدعم بنى متعددة المشاريع. أيضا وجود بعض البناء تلو الآخر هو لطيف ويجعل البرامج النصية البناء أكثر إيجازا. مع Maven ، فإنه يأخذ البناء حسب الاتفاقية أكثر من اللازم ، ويصبح تخصيص عملية الإنشاء عملية اختراق. أيضا ، Maven يعزز كل مشروع نشر قطعة أثرية. أحيانًا يكون لديك مشروع مقسّم إلى مشاريع فرعية لكنك تريد أن يتم إنشاء جميع المشاريع الفرعية وإصدارها معًا. لا حقا شيء تم تصميم Maven ل.

مع Gradle يمكنك الحصول على المرونة من Ant والبناء حسب اتفاقية Maven. على سبيل المثال ، من غير العادي تمديد دورة حياة البناء التقليدية مع المهمة الخاصة بك. وأنت لا تجبر على استخدام الاتفاقية إذا كنت لا ترغب في ذلك. Groovy هو أجمل بكثير من رمز XML. في Gradle ، يمكنك تعريف التبعيات بين المشاريع على نظام الملفات المحلي دون الحاجة إلى نشر القطع الأثرية لكل منها إلى مستودع. أخيرا ، يستخدم Gradle اللبلاب ، لذلك لديه إدارة تبعية ممتازة. الجانب السلبي الوحيد الحقيقي بالنسبة لي حتى الآن هو عدم وجود تكامل الكسوف الناضج ، لكن خيارات مافن ليست أفضل بكثير.


أوافق جزئيا مع إد ستوب. إن Gradle بالتأكيد أكثر قوة مقارنة بالأخضر ويوفر مرونة أكثر على المدى الطويل.

بعد إجراء تقييم للانتقال من المخضر إلى الخبث ، قررنا التمسك بالمخضر نفسه لمسألتين صادفناهما مع الغرابيل (السرعة هي أبطأ من المخضر ، والوكيل لا يعمل).


يمكنك العثور على كل ما تحتاج إلى معرفته عن Gradle هنا: دليل المستخدم لـ Gradle Plugin

أهداف نظام البناء الجديد

أهداف نظام البناء الجديد هي:

  • اجعل من السهل إعادة استخدام التعليمات البرمجية والموارد
  • اجعل من السهل إنشاء عدة تنويعات من تطبيق ، إما لتوزيع متعددة-APK أو للنكهات المختلفة للتطبيق
  • اجعل من السهل تكوين وتوسيع وتخصيص عملية الإنشاء
  • دمج IDE جيد

لماذا غراجل؟

Gradle هو نظام إنشاء متقدم بالإضافة إلى مجموعة أدوات متقدمة تسمح بإنشاء منطق بناء مخصص من خلال المكونات الإضافية.

فيما يلي بعض ميزاته التي جعلتنا نختار Gradle:

  • المجال محددة المجال (DSL) لوصف والتعامل مع المنطق البناء
  • تكون ملفات البناء مبنية على أساس Groovy وتسمح بخلط العناصر التعريفية من خلال DSL واستخدام التعليمة البرمجية لمعالجة عناصر DSL لتوفير منطق مخصص.
  • المدمج في إدارة التبعية من خلال مافن و / أو اللبلاب.
  • مرنة جدا. يسمح باستخدام أفضل الممارسات ولكن لا تفرض طريقة خاصة به للقيام بالأشياء.
  • يمكن للمكونات الإضافية أن تعرض DSL الخاصة بها وواجهة برمجة التطبيقات الخاصة بها لإنشاء الملفات لاستخدامها.
  • حسن API الأدوات التي تسمح التكامل IDE






java maven ant build-process gradle