أعترف بذلك ، عملنا جميعًا على إنشاءات في Maven لأمسيات وليالي طويلة ، وفي تلك اللحظة أردت حقًا أن أخبر اثنين من المبدعين المحبين لهذه التكنولوجيا الرائعة. في بعض الأحيان تتحقق الأحلام! صادفت أنا و Zhenya (
الفلبين ) معظم مطوري Maven الرئيسيين - Robert Scholte. وما سألناه عنه ...
اقرأ المزيد →
مع دورة الإصدار الجديدة ، تأتي إصدارات Java واحدة تلو الأخرى ، وقد ظهرت النسخة الحادية عشرة بالفعل ، بينما يجلس العديد منها في الثامنة. ستقدم قريبًا عرضًا تقديميًا حول كيفية دعم Maven لكل هذا ، ولا تريد إفساد التقرير ، ولكن اطرح سؤالاً في هذا الاتجاه. ما رأيك شخصيًا في دورة الإصدار الجديدة التي تضيف عملاً إليك؟ هل هذا تغيير للأفضل أم للأسوأ؟
إذا كنت تتحدث عن دورة إصدار مدتها 6 أشهر ، فإن الأمر سريع بعض الشيء بالنسبة لـ Maven. فريقنا صغير بما فيه الكفاية ، لدينا حوالي 5-10 مشاركين نشطين ، وجميعهم متطوعون ، ولا توجد شركة تعمل على تطوير مخضرم. لذا ، يجب على الجميع العمل في المشروع في وقت فراغهم. التغييرات في جافا تخلق الكثير من العمل. في كل مرة يتم فيها إصدار إصدار جديد ، نحتاج إلى تقديم دعمه ، مما يعني أنه ليس لدينا وقت لـ Maven أو مكونات إضافية له أو أي شيء آخر. سيكون من الأفضل لي إذا كانت الدورة سنة أو نصف طويلة.
هل لدى الأشخاص الآخرين الذين يطورون مشاريع لنظام جافا البيئي شعورًا مشابهًا ، والذين يحتاجون أيضًا إلى تقديم الدعم لأحدث الإصدارات؟
إذا حكمنا من خلال تويتر ، ثم نعم ، يتفق معظمهم على أن 6 أشهر سريعة جدًا.
هل يمكنك أن تحكي قصة مخضرم؟ إذا كنت أتذكر بشكل صحيح ، فقد تم إنشاؤه منذ وقت طويل لجعل Apache Turbine يبني أقل مخيفًا ومؤلمًا. بالمناسبة ، استخدمت أباتشي توربين. هل تتذكر هذه المرة؟
بدأت قصة مافين منذ فترة طويلة. انضممت إلى المشروع منذ حوالي 8 سنوات ، أي خلال الإصدار 3.0.3 أو 3.0.4. وفي هذه المرحلة ، كان Maven موجودًا منذ فترة طويلة. على حد علمي ، كان جزءًا من مشروع التوربين. تم صنع أداة منفصلة من جزء من هذا المشروع ، الذي أصبح Maven. أنا ، مثل كل شيء على الأرجح ، استخدمت Ant ثم. لم يعجبني ذلك في كل مرة بدأت فيها العمل في مشروع جديد ، كنت بحاجة إلى نسخ جميع ملفات Ant. كنت أعلم أنه يجب أن يكون هناك حل أفضل ، وبدأت في البحث عنه على الإنترنت ووجدت مافين. ومع ذلك ، قبل أن أفهم الفكرة الرئيسية لـ Maven ، مر الكثير من الوقت. ومع ذلك ، عندما تفهمها ، تصبح ملائمة. اختفت جميع المشاكل التي كانت لدي مع Ant. لا تزال Ant أداة رائعة ، ولكن إذا كنت تعمل على مشروع يجمع العديد من المصادر ، فإنني أوصي بشدة بـ Maven أو أداة مماثلة.
مخضرم هو مجرد جافا. حاولت استخدامه لـ C ++ ، ولكنه لم يكن لطيفًا جدًا. هل هناك وقت لم تعد فيه جافا ، وماذا سنفعل بعد ذلك؟
من بين اللغات الشائعة الحالية الموجهة للكائنات ، يبدو أن Java واحدة من أقدم اللغات ، وقد تجاوز عمرها بالفعل 20 عامًا. لم ألقي نظرة على أحدث الإحصائيات ، لكني متأكد من أن جافا ما زالت منتشرة للغاية. أعتقد أنه سيكون موجودًا لبعض الوقت. آمل ذلك على الأقل - هذا يعني أنني لن أترك بدون عمل.
هل سيعيش مافن طويلا؟
لكن هذا سؤال صعب. حتى اليوم ، 65-80٪ من مشاريع جافا تستخدم Maven. حتى بالنسبة لمنتج يزيد عمره عن 15 عامًا ، فهذا كثير. ربما ، يمكن تحسين الكثير في مافن. لدينا أفكار لـ Maven 4 وحتى Maven 5. ولكن سيستغرق تنفيذها وقتًا طويلاً. أعتقد أن الفكرة العامة لـ Maven لن تصبح قديمة ، لكن أنظمة التجميع الأخرى قد تتفوق عليها. لأنهم يستخلصون التجربة من الأخطاء التي ارتكبناها في Maven ومن القرارات التي اتخذناها بشكل صحيح ، وبناءً على هذه التجربة ، يمكنهم البدء من الصفر. من مزايا Maven التوافق العكسي. يمكن حتى تجميع مشروع مكتوب قبل 10 أو 15 عامًا باستخدام أحدث إصدار من Maven. ولكن بسبب هذا ، لدينا الكثير من الرموز القديمة في Maven Core. يجب استبداله ، لكن هذا ليس بالأمر السهل.
بقدر ما أتذكر ، لا يزال بإمكانك الآن بناء موجي بدون تعليقات توضيحية.
نعم هذا ممكن.
قبل المقابلة ، حاولت العثور على برنامج تعليمي حول هذا الموضوع ، ولم أجد أي شيء. يبدو الأمر كما لو أن langoliers يلاحقوننا ويأكلون جميع الوثائق القديمة على الإنترنت. لكنني أتذكر أنه ذات مرة لم تكن هناك تعليقات وشروح خاصة استخدمت. حسناً ، دعنا ننتقل إلى سؤال آخر. هل تعتقد أن مافن لديه منافسة حقيقية؟ قل غراد؟
جرادل منافس قوي للغاية ، وقد كان موجودًا منذ بعض الوقت. أعتقد أن المنافسة أمر جيد ، لأنها تبقينا في حالة جيدة وتتيح لنا رؤية بعض الحلول البديلة. لديهم فقط طريقة مختلفة لكيفية جمع المشاريع ، فلا حرج في ذلك. يجب على الجميع اختيار ما يناسب مشروعهم. ربما يجب أن أذكر أيضًا الموالية هنا . هذه أداة كتبها ريمي فوركس من فريق ASM (محلل بايت كود). كان مثلي عضوًا في فريق الخبراء لمشروع Jigsaw. أراد أن يكتب أداة بناء تعكس أفكار جافا بشكل أفضل. عند إنشاء محترف ، اقترض أفضل جوانب مخضرم. مشاهدة هذا كان مثيرا للاهتمام. لقد تم تصميم عرض توضيحي لإظهار أنه يمكنك استخدام وحدات Java 9 والمزايا ذات الصلة في أداة الإنشاء.
قلت أنك شاركت في مشروع Jigsaw - وقلت ذلك في الماضي. توقف عن الوجود؟ هل ما زالت لديه الفرصة للتطور؟
تم إغلاق JSR هذا. صحيح ، بقيت بعض المشاكل التي لم يتم حلها ، ولكن يتم التعامل معها الآن من قبل فريق الدعم.
ما سبب معظم الصعوبات في تطوير مخضرم؟ ما هي أخطر المشاكل؟ ليس من حيث Java 9 ، ولكن بشكل عام ، بناءً على جميع تجارب التطوير. هل يمكنك أن تختار ، على سبيل المثال ، أهم مشكلتين؟
السؤال ليس سهلا ، لكن دعنا نحاول. الجزء الذي يحدث فيه قرار التبعية معقد للغاية. ما زلنا نحاول تحسينه. ربما لاحظت أنه لم يكن هناك نسخة مخضرم 3.4 ، بعد الإصدار 3.3.9 كان هناك على الفور 3.5.0. السبب الرئيسي لذلك هو أنه كانت هناك تغييرات كبيرة في حل التبعيات. تم وضع علامة على أنها إصلاحات أخطاء ، لكننا لاحظنا أن عددًا كبيرًا من المشاريع قد تم كسرها فجأة - فقد اعتمدوا على هذه التغييرات الغريبة. كان هذا غير مقبول. لذلك ، قمنا بما لم نكن نتخذه تحت أي ظروف أخرى - مستودع بوابة git الذي تم إعادة تعيينه بشكل ثابت ، وفي Maven 3.5.0 بدأنا في تحديد التحسينات الخارجية فقط. حسنًا ، وبالطبع ، جعلنا وحدة التحكم متعددة الألوان - أحبها الجميع.
حسنا ، الآن هي الصعوبة الثانية!
لم يكن من السهل علينا العثور على اتصال مع مجتمع Maven وتعليمهم كيفية استخدام الأداة بشكل صحيح.
لذلك يعرف الجميع كيفية استخدام Maven: انسخ بعض خطوات XML من التعليقات على Stack Overflow ، وهو يعمل. أليس كذلك؟
حسنًا ، حسنًا. لا. أنا متأكد من أنه في معظم الأحيان سيتم نصحك بإجراء تثبيت نظيف ، وهذا ليس صحيحًا. لذا ، ربما ، يجب أن يتم ذلك في Maven 2. الآن تحتاج إلى تشغيل التحقق من mvn. لأنه عند التنظيف ، يتم حذف كل شيء ، والنتيجة الكاملة للعمل. وإذا تم نسخ الملفات منك - فهذه عمليات I / O ، فهي بطيئة. بشكل عام ، سيتم تنفيذ العديد من الأشياء عدة مرات. معظم الإضافات تعرف متى تحتاج للقيام بعملها. كقاعدة عامة ، ليست هناك حاجة للتنظيف. بالنسبة للتثبيت ، يقوم هذا الأمر بنسخ ملفات JAR فقط إلى المستودع المحلي. هذه ، مرة أخرى ، عملية إدخال / إخراج غير ضرورية. علاوة على ذلك ، قد يصبح المستودع المحلي متسخًا - أي قد يبدو مختلفًا عن المستودع المحلي لزميلك. في بعض الأحيان يمكن أن يؤدي هذا إلى نتائج مثيرة للاهتمام. لذلك يجب عليك فقط تشغيل التحقق من mvn ، هذا يكفي.
بالمناسبة ، لقد فتحت للتو maven.apache.org ، وتقول: "Apache Maven هي أداة لإدارة المشاريع وفهمها ". لكن الكثير من الناس يعتقدون أن Maven هو مجرد أداة بناء أخرى. ما الفرق بين أداة التجميع وأداة إدارة المشروع؟
من الأفضل عدم الإجابة على هذا السؤال - لست أنا من كتبه على الموقع. أعتقد أن المؤلف أراد أن يقول إن Maven هو أكثر بكثير من مجرد بناء مشروع. كما أنه يشارك في حل التبعيات ، فهو يوفر تنسيق التكوين ، ويسمح بعدم تثبيت الكثير من الأشياء. بشكل عام ، هذه مجموعة ضخمة من كل شيء في العالم.
ما هي المبادئ والمعتقدات الرئيسية لفريق Maven؟ على سبيل المثال ، هل يعتقدون أن النهج الإعلاني أفضل من ضرورة؟ شيء مثل Zen في Python. هل لديك مجموعة مماثلة من القواعد؟
لا أعتقد ذلك. في رأينا ، يجب أن يكون تكوين الإضافات بسيطًا قدر الإمكان. في حالة وجود افتراضيات معقولة ، يجب الإشارة إليها. هذا سيجعل الحياة أسهل للمستخدم النهائي. لأول مرة منذ عدة سنوات ، قمنا مؤخرًا بتغيير الخيار الافتراضي لإصدارات المصدر والهدف - قبل أن يصبح 1.5 ، الآن هو 1.6. أردنا أن يكون الخيار الافتراضي موجودًا ، لأنه بدونه يتم استخدام الإصدار المستخدم في JDK. في هذه الحالة ، إذا استخدمت Java 10 ، وكان شخص آخر يستخدم Java 12 ، فسوف نحصل على نتائج مختلفة. يجب عليك دائمًا تحديد المصدر والهدف. ولكن إذا بدأت في استخدام Java 9 ، فلن يعد بإمكانك إنشاء Hello World بملف pom بسيط وفئة واحدة ، حيث تتطلب Java 9 على الأقل Java 6 لقيم المصدر والهدف. لذلك ، قررنا أن نجعل الإصدار الافتراضي 1.6 وأضفنا تحذيرًا بأنه إذا لم تكن قد حددت إصدارًا بعد ، فيجب القيام بذلك - يجب أن يعرف الأشخاص أنك بحاجة إلى تعيين إما إصدارات المصدر والهدف أو قيمة الإصدار إذا كنت تعمل مع Java 9. أو كليهما.
ما الصعوبات التي تراها في مخضرم في المستقبل؟ قلت أنك تحاول عدم تغيير مخضرم في كثير من الأحيان. ومع ذلك ، ما الذي ينتظرنا في المستقبل؟
يتعلق أحد أهم التغييرات التي نريد إجراؤها بملف pom. وجدنا أنه في بعض الأقسام - خاصة في البناء - سيكون من الجيد إضافة بعض العناصر الإضافية. لكن في الوقت الحالي ، لا يمكننا القيام بذلك. يتم تحميل نفس ملف pom الذي تستخدمه على نظامك. إذا قمت بإضافة عناصر أخرى إليه ، فسوف ينتهكون XSD ، ولن تتمكن الأدوات الأخرى من استخدامه.
ولكن هل يمكنك تغيير XSD في الرأس؟
نعم ولكن لا أعتقد أن كل أداة تتحقق من XSD. يعتقدون فقط أنهم يتعاملون مع الإصدار 4.0.0. لذا سيكون من الصعب إجراء التغييرات. قررنا أننا سنقسم ملف pom إلى عدة أجزاء ونبدأ بـ Build POM. وسيطلق على الشخص الذي سيتم تفريغه اسم دليل المستهلك. سيتم إنشاؤها بناءً على Build POM ولا يلزم اتخاذ أي إجراء آخر. وستكون متوافقة تمامًا مع Maven POM 4.0.0. من خلال تقسيم POM إلى قسمين ، يمكننا أخيرًا تحسينه بشكل كبير وجعل Maven أسهل في الاستخدام. هذا تغيير في جوهر Maven ، وقد عملنا عليه لأكثر من عام ، بما في ذلك التنفيذ في IDE. هذا ليس سهلا.
تحاول بعض IDEs تضمين أجزاء من Maven في IDE لأسباب التكامل ، والإكمال التلقائي ، والتجميع التدريجي ، وما إلى ذلك. كيف تفعل ذلك بشكل صحيح؟ بقدر ما أتذكر ، تم بناء بعض أجزاء Maven في Eclipse منذ فترة طويلة.
أعتقد أن هذه المحاولات لها ما يبررها - كان هذا النظام مناسبًا جدًا للمستخدمين بسبب التكامل. تم تحقيق ذلك بفضل أحد التغييرات الهامة التي تم تنفيذها في Maven 3. حيث تم إعادة تصميم البنية لتوفير دعم أفضل في IDE. عمل مؤلفو هذه التغييرات بشكل وثيق مع Eclipse ، وجاء هذا الحل من هنا. أعتقد أن هذا جائز. أعلم أن NetBeans و InelliJ لديهما نهج مختلف تمامًا ، فهما فقط يتصلان بـ Maven من سطر الأوامر دون أي تكامل.
موضوع آخر مهم هو سرعة مخضرم. يمكننا زيادة بطريقة أو بأخرى؟ دقة التبعية وعمليات الإدخال / الإخراج بطيئة جدًا. حتى اليوم على SSD.
نعم ، يمكن فعل شيء. تحتاج أولاً إلى إلقاء نظرة على عدد النوى الموجودة في نظامك وبدء مخضرم بعدة خيوط. هذا هو أحد الحلول. أيضا ، ألق نظرة على Takari. هذه شركة أنشأها Jason van Zayl ، أحد مؤسسي Maven. كتب بعض الامتدادات المثيرة للاهتمام ودعم محسّن بشكل كبير للتجميعات المتوازية ، أي عند بناء العديد من المشاريع. آمل أنه سيقدم يومًا ما هذه التطورات لـ Maven ، ولكن الآن يجب أن تلقي نظرة على صفحته.
قلت أنك كنت تعمل على مخضرم في وقت فراغك ، أليس كذلك؟ هل حقيقة أنك أحد مبدعي Maven يساعد في وظيفتك الحالية؟ أم أنها مجرد هواية؟
أعمل مهندس برمجيات في مؤسسة حكومية في هولندا. هكذا أكسب رزقي. بالطبع ، يعرفون أني أعمل أيضًا على Maven ، لذلك يسألوني بشكل دوري أسئلة حول Maven. لكن بشكل عام ، أنا مهندس معماري فقط. وفي المساء ، أعمل على Maven ، أحاول تحسينه ، ومساعدة الناس.
هل تعمل في مشاريع أخرى مفتوحة المصدر بجانب Maven؟
أشارك في مشروعين آخرين. واحد يسمى MojoHaus ، طور جزءًا كبيرًا من الإضافات لـ Maven. صحيح ، الآن لا أفعل الكثير في هذا المشروع ، لكنني ما زلت في بعض الأحيان أبحث هناك وأحكم أشياء صغيرة مختلفة. مشروع آخر يسمى QDox. يوزع رمز المصدر. كما أنه مرتبط بـ Maven ، حيث يتم استخدامه في بعض المكونات الإضافية له. تساعدني هذه التجربة ، لأنه ، على سبيل المثال ، في حالة واصف الوحدة ، الذي تم تقديمه في Java 9 ، سمحت لي التجربة باستخدام واصف في المكونات الإضافية لـ Maven.
بالمناسبة ، ما رأيك في Java 9 ، 10 ، 11؟ هل يجب أن أستخدمها ، أم من الأفضل البقاء مع Java 8؟
الترحيل إلى الإصدارات الأحدث. حتى إذا كنت لا تستخدم جميع الميزات ، يجب عليك الترقية إلى Java 10 ، أو الانتظار لبضعة أسابيع والترقية إلى Java 11. فقط استخدم مسار الفصل. Java أسرع بشكل كبير بفضل نمطيتها ، لكن مسار الفصل يعمل فقط. أعلم أن الكثيرين ما زالوا يعتقدون أنك بحاجة إلى إضافة وحدة وصف أو استخدام نظام وحدة ، ولكن هذا ليس ضروريًا. مجرد استخدام classpath.
بالمناسبة ، هل أنت على دراية بمشروع GraalVM؟ ماذا عن استخدامه لبناء مخضرم؟
قمت بزيارة JavaZone الأسبوع الماضي وناقشت هذا مع كريس وأوليج. أعتقد أننا سنحتاج إلى قضاء بعض الوقت في ذلك ، ومعرفة ما إذا كان من الممكن تحسين أداء Maven بالفعل مع GraalVM. قد يكون من المثير للاهتمام.
أنت مبدع Maven ، وهو مشروع مهم جدًا لمطوري Java. ما هي مشاعرك حول هذا؟
أنا لست مؤسس المشروع ، أنا منخرط في دعمه. لقد بدأت في التعامل معه عندما كان قد قطع شوطًا طويلًا بالفعل ، ويبدو أنني أحصل عليه. قبل عشر سنوات ، لم أكن لأظن أنني سأنتهي في نهاية المطاف على قمة التسلسل الهرمي ، ولكنه حدث ، وهو رائع جدًا. كل شخص لديه رأي حول Maven ، وأنا أحب ذلك حقًا عندما تأتي إلى المؤتمر ، يأتي الناس ويقولون أنهم سعداء بـ Maven. هذا يحفزني كثيرًا ويعطيني القوة لمواصلة العمل في المشروع عندما أعود إلى المنزل.
يكره العديد من المطورين XML بشدة. أنا لست واحدًا منهم ، ولكن عندما يتعلق الأمر ببناء أنظمة ، فإن هذا الموضوع ينبثق دائمًا بسبب pom.xml في Maven. لذلك أريد أن أعرف: ما رأيك في XML؟
الشيء الجيد في XML هو أن الجميع يفهمها ، ومن السهل تحليلها ، ويمكنها تقديم دعم جيد جدًا في IDE. أنا عادي تمامًا مع XML ، وعلى حد علمي ، بين مستخدمي Maven لا يزيد عن 5٪ يكرهون XML - لكنهم يصرخون بصوت عالٍ! وأنت ببساطة لا تسمع 95٪ المتبقية. ومع ذلك ، هناك حل لهذه الـ 5٪ - وهنا مرة أخرى أود أن أذكر تاكاري. هناك مشروع متعدد اللغات يسمح لك بتحديد بناء جملة مختلف. لذلك إذا كنت تريد استخدام Yaml و pom.yml - فهذا ممكن تمامًا. تحتاج فقط إلى إضافة ملحقات للمشروع ، ويمكنك التبديل إلى لغة أخرى.
وكذلك عن مزاج المطورين: أذكر الخيط في قائمة Maven البريدية ، حيث مؤلف أداة SDKMAN! رد المجتمع على مقترح توزيع المافين من خلاله بعبارات مثل "كل ما أراه هو مشروع باسم غبي" و "يمكنك بيع فكرتك بشكل أفضل". ثم نشأت المناقشات: يعتقد البعض أن رد فعل المجتمع بقوة ، في حين أن البعض الآخر - أن الجملة الأولية "القيام بأعمال إضافية فيما يتعلق بأداتي" لا أساس لها. بطريقة أو بأخرى ، كان الكثيرون غير راضين عن الوضع ، وفي هذا الصدد السؤال: هل تعتقد أن Maven أو مجتمع المصادر المفتوحة بشكل عام لديهم مشاكل في الاتصال بشكل عام؟
يمكن أن يكون التواصل صعبًا جدًا ، وهذا أمر مؤكد. خاصة عندما يحدث ذلك من خلال النص فقط ولا ترى المحاور أمامك - في هذه الحالة يصبح من الصعب شرح ما تريد قوله. أعتقد أن كل مشروع مفتوح المصدر يواجه مشكلة التواصل بشكل صحيح مع الناس. أفهم تمامًا سبب انزعاج المشاركين في المشروع أحيانًا - فهم يسمعون نفس الأسئلة مرارًا وتكرارًا. مثال على هذا السؤال ، الذي ذكرته بالفعل - "لماذا لا يمكنك استخدام mvn clean install"؟ توقفت عن شرح هذا ، لأنه بخلاف ذلك كنت سأتحول إلى شخص وقح ، لكنني لا أريد ذلك. لذلك أشرح مثل هذه الأشياء بطرق أخرى. لذا ، من ناحية ، يمكن أن يكون التواصل صعبًا للغاية. من ناحية أخرى ، على الرغم من أن Maven غير مرن ، إلا أنه جزء من نجاحه. عندما يأتي الناس بعروض لا تتوافق مع مفهوم مخضرم ، نقول فقط: آسف ، لكن هذا لا يناسبنا لسبب ما. أنا أفهم تمامًا أن هذا يمكن أن يكون محبطًا. ولكن بشكل عام ، هذا النهج هو فقط للأفضل.
هل يمكنك ، في النهاية ، قول بضع كلمات لقرائنا ، تقترح كيف يمكنهم الوصول إلى مستقبل مشرق؟
كما قلت ، يعمل فريق صغير على Maven ، وهو مشروع مفتوح المصدر يمكن للجميع المشاركة فيه. ليس الأمر صعبًا. لقد أنشأنا تصنيفًا جديدًا يسمى الاستيلاء. هذه مشاكل لا يجب إصلاحها. بهذه الطريقة ، يمكنك التعرف على كيفية عمل Maven. إذا كنت ترغب في الانضمام إلى فريقنا ، فعند مثال الإصلاحات الخاصة بك ، سنرى جودة الشفرة الخاصة بك - إذا كنت تريد أن نلاحظها من قبلنا ، فإنني أوصيك بتجربتها. أود حقًا أن ينمو فريقنا في المستقبل.
شكرا على الاجابات. قابلني في جوكر 2018!
دقيقة من الدعاية. سيعقد مؤتمر جوكر 2018 في 19-20 أكتوبر ، حيث سيقدم روبرت عرضًا تقديميًا حول "أباتشي مافن يدعم ALL Java" . بشكل عام ، سيكون هناك العديد من التقارير الأكثر إثارة للاهتمام والجديرة بالاهتمام في Joker. يمكن شراء التذاكر على الموقع الرسمي للمؤتمر.