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




build-process (6)

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

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

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


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

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


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

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

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

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

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


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

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


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

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


يجمع 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