سؤال

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

هل هناك بعض الخلل الأساسي مع جعل عند استخدامها مع جافا؟ هل هو فقط لأن النمل والهرافن مكتوبة في جافا؟

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

المحلول

إن القضية الأساسية التي تتمتع بجودة وجافا هي أن تجعل Works على الفرضية التي تحدد فيها اعتمادا، ثم قاعدة لحل تلك التبعية.

مع C Basic C، هذا عادة "لتحويل ملف Main.c إلى ملف Main.o، قم بتشغيل" CC Main.c ".

يمكنك أن تفعل ذلك في جافا، لكنك تتعلم بسرعة شيء ما.

في الغالب أن مترجم Javac بطيء في البدء.

الفرق بين:

javac Main.java
javac This.java
javac That.java
javac Other.java

و

javac Main.java This.java That.java Other.java

هو الليل واليوم.

تفاقم ذلك مع مئات الطبقات، ويصبح فقط غير قابل للاستمرار.

ثم تجمع بين ذلك بحقيقة أن Java يميل إلى تنظيم مجموعات من الملفات في الدلائل، و VS C وغيرها تميل نحو بنية تملق. لا تملك الكثير من الدعم المباشر للعمل مع التسلسلات الهرمية للملفات.

اجعل أيضا ليست جيدة جدا عند تحديد الملفات القديمة، على مستوى المجموعة.

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

لهذا السبب ارتفعت البدائل مثل النمل والرجاف.

نصائح أخرى

التوقيت make يعالج البرنامج لغات محمولة بشكل منفصل مثل C و C ++ بشكل جيد بشكل معقول. يمكنك ترجمة وحدة نمطية، ويستخدم #include لسحب نص ملفات أخرى، وكتابة ملف كائن واحد كمخرج. يعد برنامج التحويل البرمجي نظاما كبيرا في وقت واحد، مع خطوة مرتبطة منفصلة لربط ملفات الكائنات في ثنائي قابل للتنفيذ.

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

يمكن أن يكون مترجم Java أيضا أكثر كفاءة عن طريق التخزين المؤقت للنتائج المترجمة للفئات الأخرى أثناء تجميع المزيد من الفئات التي تعتمد على نتائج تلك التي تم تجميعها بالفعل. هذا النوع من تقييم التبعية التلقائي ليس ممكنا حقا make وحده.

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

في الواقع، يمكنك التعامل مع إعادة التحويل في أمر واحد لجميع ملفات Java القديمة. قم بتغيير السطر الأول إذا كنت لا ترغب في ترجمة جميع الملفات في الدليل أو تريد ترتيب معين ...

JAVA_FILES:=$(wildcard *.java)
#
# the rest is independent of the directory
#
JAVA_CLASSES:=$(patsubst %.java,%.class,$(JAVA_FILES))

.PHONY: classes
LIST:=

classes: $(JAVA_CLASSES)
        if [ ! -z "$(LIST)" ] ; then \
                javac $(LIST) ; \
        fi

$(JAVA_CLASSES) : %.class : %.java
        $(eval LIST+=$$<)

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

ومع ذلك، سألت عما إذا كان الأمر يهم أن النمل والهرن مكتوب في جافا. على الرغم من أنه على Stackoverflow لا نعتبر هذه الأفكار (مغلقة! غير برمجة متعلقة بالبرمجة! إلخ)، بالطبع هذا جزء من الشيء. على القضبان نستخدم أشعل النار، c dudes استخدام جعل، وفي جافا نستخدم النمل والنمل. على الرغم من أنه صحيح أن مطوري النمل أو الأفكار سوف يعتني بأن مطور Java ربما أفضل من غيرها، فهناك أيضا سؤال آخر: ماذا تكتب مهام النمل في؟ جافا. إذا كنت مطورا جافا، فهذا مناسب.

لذلك نعم، جزء منه هو استخدام الأدوات المكتوبة باللغة التي تكون فيها الأدوات.

نمت وأحدث مافن مصممة لحل بعض الصداع الناجم عن Make (أثناء إنشاء منها جديدة في هذه العملية) هو مجرد تطور.

بعد ذلك قريبا، أدركت العديد من مشاريع Java المصدر المفتوحة أن النملة يمكن أن تحل المشكلات التي كان لديهم مع makefiles ....

من http://ant.apache.org/faq.html#history.

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

الميزة الرئيسية لها، هي إمكانية الاندماج مع جافا.

أعتقد أن تاريخ مماثل سيكون مع rake على سبيل المثال.

تتمثل إحدى المشكلات الرئيسية التي تم حلها بواسطة MAVEN (و Setups Antable-enabled Ivy) هي قرار التبعية الآلي وتنزيل الجرار التبعية الخاصة بك.

أعتقد أن الشرح الأكثر احتمالا هو أن العديد من العوامل تثبط استخدام التصنيع داخل مجتمع Java في فترة زمنية حاسمة (في أواخر التسعينات):

  1. نظرا لأن Java تشمل منصات متعددة، فإن مبرمجي Java بشكل عام لم يكنوا بارعون في أدوات UNIX كما كان متبرمون محصون عموما على بيئة UNIX (على سبيل المثال، C و Perl Programmers). لاحظ أن هذا بشكل عام. بلا شك وهناك مبرمجات Java الموهوبين بفهم عميق ل UNIX.
  2. وبالتالي، كانوا أقل بارعا في صنع ولم يعرفوا كيفية استخدام تكوين بفعالية.
  3. في حين أنه من الممكن كتابة Makefile القصيرة والبسيطة التي تجمع جافا بكفاءة، فإن الرعاية الإضافية مطلوبة للقيام بذلك بطريقة مستقلة من النظام الأساسي.
  4. وبالتالي، كانت هناك شهية لأداة بناء منصة مستقلة من منصة جوهرية.
  5. في هذه البيئة، تم إنشاء النمل وأحدث مافن.

باختصار، في حين أنه من المؤكد أنه يمكن استخدامه لمشاريع Java، كانت هناك لحظة فرصة لجعلها أداة بناء جافا الفعلية. هذه اللحظة قد مرت.

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

ما لم أكن أحدا لا أحد لا أحد (MIS) باستخدام جعل Java خاطئ.

يحتوي "إدارة المشاريع مع GNU" (متوفر تحت GFDL) تحتوي على فصل كامل مخصص لاستخدام make مع مشاريع جافا.

نظرا لأنه يحتوي على قائمة طويلة (ونأمل أن نأمل) من إيجابيات وسلبيات استخدام جعل بدلا من الأدوات الأخرى التي قد ترغب في إلقاء نظرة هناك. (يرى: http://oreilly.com/catalog/make3/book/)

إجابة قصيرة: ل make ليست جيدة. حتى على الجبهة C ترى العديد من البدائل ظهرت.

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

قرار التبعية

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

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

مسافات في أسماء الملفات

في حين لا تشجع جافا ولا ج استخدام مسافات في أسماء ملفات التعليمات البرمجية المصدرية، في make يمكن أن يكون هذا مشكلة حتى لو كانت المسافات في مسار الملف. النظر، على سبيل المثال، إذا كان التعليمات البرمجية المصدرية موجودة C:\My Documents\My Code\program\src. وبعد سيكون هذا كافيا لكسر make. وبعد هذا بسبب make يعامل أسماء الملفات كسلاسل. ant يعامل المسارات ككائنات خاصة.

مسح الملفات للبناء

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

وأكبر مشكلة مع make:

جعل هو بوسيكس المعال

شعار جافا هو "تجميع مرة واحدة في كل مكان". لكن تقييد أن تجميع الأنظمة القائم على posix، والتي يكون فيها دعم جافا هو في الواقع الأسوأ، ليس النية.

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

هذا يأتي في اثنين من الأصناف:

  1. MSYS الذي يحاول الحد من ترجمة Posix إلى مسارات الملفات، وبالتالي يمكن أن يحتوي Gotchas غير سارة عند تشغيل الأدوات الخارجية غير المصنوعة خصيصا لذلك.

  2. cygwin التي توفر مضاهاة بوسيكس كاملة. ومع ذلك، فإن البرامج الناتجة، ومع ذلك، تميل إلى الاعتماد على هذه الطبقة المضاهاة.

لهذا السبب، على Windows، أداة الإنشاء القياسية ليست كذلك make على الإطلاق، ولكن MSBuild, وهي أيضا أداة قائمة على XML، أقرب من حيث المبدأ ant.

على نقيض ذلك، ant تم تصميمه في Java، ويمكن تشغيله في كل مكان، ويحتوي على أدوات داخلية، تسمى "المهام"، لمعالجة الملفات وتنفيذ الأوامر في طريقة مستقلة من النظام الأساسي. انها تنوعا بما فيه الكفاية بحيث يمكنك في الواقع بناء وقت أساسي في برنامج C في Windows باستخدام ant من استخدام make.

وآخر قاصر واحد:

حتى برامج C لا تستخدم جعل أصلا

قد لا تلاحظ في البداية هذا، لكن برامج ج لا يتم شحنها عموما مع Makefile. وبعد يتم شحنها مع CMakeLists.txt, أو أ bash البرنامج النصي التكوين، الذي يولد الفعلية Makefile. وبعد على النقيض من ذلك، قام مصدر برنامج Java بنيت باستخدام ant يتم شحنها مع ant البرنامج النصي مسبقا. أ Makefile هو منتج لأدوات أخرى - هذا هو كم make غير مناسب أن تكون أداة بناء بمفردها. ant هو مستقل، ويتصع مع كل ما تحتاجه لعملية بناء Java الخاصة بك، دون أي متطلبات أو تبعيات إضافية.

عند تشغيل ant على أي منصة، فإنه يعمل فقط (TM). لا يمكنك الحصول على ذلك مع make. وبعد انها منصة بشكل لا يصدق وتعتمد التكوين.

النمل هو تحسين تكوين XML الموجه على Makefiles و Maven هو تحسين أداة بناء التبعية على النمل. بعض المشاريع تستخدم الثلاثة. أعتقد أن مشاريع JDK تستخدم لاستخدام مزيج من Makefiles و Ant.

أحد الأسباب الكبرى هو أن كلا من النمل والمدير (وأدوات CI المستهدفة، CI و IDE Tools) مكتوبة في Java by / for Java Developers. هذا يجعلها أكثر بساطة للتكامل في بيئة التطوير الخاصة بك وتسمح بأدوات أخرى مثل خوادم IDE و CI لدمج أجزاء من مكتبات النمل / المنفجن داخل البنية التحتية للبناء / النشر.

ذات مرة عملت في مشروع Java يستخدم GMAKE. تذكرتي ضبابية لكن IIRC كان لدينا صعوبة في التعامل مع بنية دليل الحزمة التي تتوقعها Javac. أتذكر أيضا أن بناء ملفات جرة كان متاعب إلا إذا كان لديك شيء تافه.

Apacheant ليس أي شيء مثل صنع. جعل حول وصف التبعيات بين الملفات، وكيفية بناء الملفات. النملة تدور حول التبعيات بين "المهام"، وهي حقا أكثر وسيلة لإلقاء الإلتصاق ببناء البرامج النصية معا.

قد يساعدك antvsmake.

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

لم أستخدم GNU مطلقا لمشاريع Java، لكني اعتدت استخدامها JMK.. وبعد للأسف لم يتم تحديثه منذ عام 2002.

كان لديه بعض الوظائف الخاصة ب Java لكنها كانت صغيرة بما يكفي لتضمينها في Tarball المصدر الخاص بك دون زيادة حجمها بشكل كبير.

في الوقت الحاضر، أفترض أن أي مطور Java أشعر برمز مع تثبيت النمل.

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