لماذا استخدام المتدرج بدلا من النمل أو مافن؟ [مغلق

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

سؤال

ماذا تستهدف أداة بناء أخرى في جافا حقا؟

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

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

المحلول

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

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

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

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

يعد المتدرج بضرب البقعة الحلوة بين النمل والمير. ويستخدم ذلك لبلابنهج قرار التبعية. يسمح باتفاقية حول التكوين ولكن أيضا تتضمن مهام النمل كمواطنين من الدرجة الأولى. كما يسمح لك بحكمة باستخدام مستودعات MAVEN / IVY الحالية.

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

نصائح أخرى

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

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

المتدرج لديه مرحلتان متميزان: التقييم والتنفيذ. في الأساس، خلال التقييم سوف يبحث المتدرج عن وتقييم بناء البرامج النصية في الدلائل من المفترض أن ننظر. أثناء التنفيذ، سيقوم Madle بتنفيذ المهام التي تم تحميلها أثناء التقييم مع مراعاة المهام فيما بين التبعيات.

علاوة على حجم برمجة التبعية هذه الميزات، يضيف الخرج ميزات التبعية للمشروع وجرة عن طريق تداخل مع اباتشي اللبلاب. كما تعلمون IVY هو أداة إدارة التبعية ذات التبعية الأكثر قوة وأقل بكثير مما يقول مافن.

يكتشف الخرج التبعيات بين المشاريع وبين المشاريع والجرار. يعمل المتدرج مع مستودعات MAVEN (تنزيل وتحميل) مثل ibiblio One أو المستودعات الخاصة بك ولكن أيضا يدعم ونوع آخر من البنية التحتية للمستودع التي قد تكون لديكم.

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

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

قد يكون هذا مثيرا للجدل قليلا، لكن الخرج لا يخفي حقيقة أنها لغة برمجة كاملة.

تعد Ant + Ant-Contriby في الأساس لغة برمجة كاملة تماما لا أحد يريد حقا البرنامج.

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

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

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

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

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

build.gradle:

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

علاوة على ذلك، يستخدم بناء جملة Groovy الذي يعطي أكثر قوة تعبيرا ثم XML ANT / MAVEN.

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

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

أو

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

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

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

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

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

ضع المتدرج مرة أخرى في برنامج بناء / تجميع. لقد استخدمت نملة لبناء برامج حياتي المهنية بأكملها وكانت دائما تعتبر جزءا فعليا "Buildit" جزءا من عمل DEV سيكون شريرا ضروريا. بضعة أشهر من عودة شركتنا، تعبت شركتنا من عدم استخدام ريبو ثنائي (AKA تحقق في الجرار في VCS) وتم إعطاؤي المهمة للتحقيق في هذا. بدأت مع اللبلاب حيث يمكن تثبيتها على رأس النملة، لم يكن لديك الكثير من الحظ في الحصول على القطع الأثرية المبنية التي نشرت كما أردت. ذهبت إلى مافن واخترعت مع XML، عملت رائعة لبعض Libs المساعد البسيط، لكنني ركضت في مشاكل خطيرة في محاولة لحزم التطبيقات الجاهزة للنشر. ومما كان متضلل لفترة طويلة على الرغم من إضافات Googling وقراءة المنتديات وجرح تنزيل تريليونات من الجرار الدعم لمختلف الإضافات التي كان لدي صعوبة في استخدامها. وأخيرا ذهبت إلى المتقدمة (الحصول على مرارة للغاية في هذه المرحلة، وأزعجت أن "لا ينبغي أن يكون هذا صعبا!")

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

  • Groovy سهل الاستخدام للغاية لمطوري Java
  • الوثائق رائعة لرهيبة
  • المرونة لا نهاية لها

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

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

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

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

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

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