تشغيل أوامر باش مختلفة بناءً على إصدار Java

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

  •  23-09-2019
  •  | 
  •  

سؤال

أحاول تطوير نص Bash Build لمشروع Java الذي سيتم تشغيله على Ubuntu و Fedora. يستخدم Ubuntu برنامج التحويل البرمجي GCJ بينما يستخدم Fedora ICEDTEA.

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

بالنسبة إلى GCJ ، أريد الركض:

javac *.java 2>&1 | grep -A 4 "error:"

لكن بالنسبة إلى ICEDTEA ، أريد الركض:

javac *.java 2>&1 | grep -A 4 "error:\|errors\|.java:"

ما زلت جديدًا على Bash ، فكيف أكتب عبارة if من شأنها أن تدير أحدها مقابل الآخر بناءً على إصدار Javac؟

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

المحلول

على افتراض تطابق ثنائيات Java و Javac ، وأن Icedtea هي الحالة الخاصة.

#!/bin/bash

ERROR="error:"

java -version 2>&1 | grep -i icedtea > /dev/null
if [ $? -eq 0 ]; then
   ERROR="error:\|errors\|.java:"
fi

javac *.java 2>&1 | grep -A 4 $ERROR

على نظامي ، يكون لدى Icedtea و Sun نفس الإخراج لـ "Javac -Version" ، ولكن ليس لـ "Java -Version".

نصائح أخرى

كتابة البرامج النصية لبناء Java في Bash (أو أي لغة شل أخرى) لديها عدد من المشاكل:

  • تميل البرامج النصية إلى أن تكون غير قابلة للحمل بسبب اختلافات الصدفة ومواقع الأوامر المختلفة وخيارات الأوامر غير المتوافقة وما إلى ذلك ... حتى لو حاولت جعل المحمول.

  • لا يمكن أن تتعامل البرامج النصية مع التبعيات (أو على الأقل ليس بسهولة)

  • لا يمكن أن تتعامل البرامج النصية مع إعادة تجميع الأشياء التي تغيرت فقط

بدلاً من ذلك ، أقترح عليك كتابة ملف "build.xml" واستخدم ملف أداة بناء النمل. تتمتع ANT بميزة التشغيل على أي منصة بناء تدير Java ، ورعاية الغالبية العظمى من فروق المنصة. إنه نوع من "صنع" أفضل مصمم خصيصًا لبناء جافا.

    #!/bin/sh

    JAVAC_VERSION="`java -version 2>&1 /dev/null | awk '/IcedTea/ {print $4}' | sed -e 's/[\(0-9]//g'`"
    ICEDTEA="IcedTea"

    if [ ${JAVAC_VERSION} = ${ICEDTEA} ]; then
        javac *.java 2>&1 | grep -A 4 "error:\|errors\|.java:"
    else
        javac *.java 2>&1 | grep -A 4 "error:"
    fi

    exit 0

يجب أن تفعل ذلك - إذا فهمت سؤالك بشكل صحيح. كيف تحصل على الإصدار - لست متأكدًا تمامًا ، ولكن إذا javac -version غير صحيح فقط قم بتغييره وفقًا لاحتياجاتك.

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