كيفية تحديد بناء العمارة (32bit / 64bit) مع النمل ؟

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

  •  03-07-2019
  •  | 
  •  

سؤال

ورثناها نملة بناء الملف ولكن الآن تحتاج إلى نشر على حد سواء 32 بت و 64 بت أنظمة.

غير جافا بت فعلت مع GNUMakefiles حيث نطلق "uname" للحصول على المعلومات.هل هناك مماثلة أو حتى أسهل طريقة تحاكي هذا مع النمل ؟

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

المحلول

ويمكنك الحصول على خصائص نظام جافا (<لأ href = "http://java.sun.com/javase/6/docs/api/java/lang/System.html#getProperties ()" يختلط = " noreferrer "> http://java.sun.com/javase/6/docs/api/java/lang/System.html#getProperties () ) من النمل مع $ {os.arch}. قد os.name الخصائص الأخرى ذات الاهتمام، os.version، sun.cpu.endian، وsun.arch.data.model.

نصائح أخرى

في وقت متأخر إلى الحزب ، ولكن ما هيك...

${os.القوس} إلا يقول لك إذا JVM 32/64bit.قد يتم تشغيل 32bit JVM على نظام التشغيل 64bit.جرب هذا:

<var name ="os.bitness" value ="unknown"/>
<if>
<os family="windows"/>
<then>
    <exec dir="." executable="cmd" outputproperty="command.ouput">
        <arg line="/c SET ProgramFiles(x86)"/>
    </exec>
    <if>
        <contains string="${command.ouput}" substring="Program Files (x86)"/>
        <then>
            <var name ="os.bitness" value ="64"/>
        </then>
        <else>
            <var name ="os.bitness" value ="32"/>
        </else>
    </if>
</then>
<elseif>
    <os family="unix"/>
    <then>
        <exec dir="." executable="/bin/sh" outputproperty="command.ouput">
        <arg line="/c uname -m"/>
        </exec>
        <if>
            <contains string="${command.ouput}" substring="_64"/>
            <then>
                <var name ="os.bitness" value ="64"/>
            </then>
            <else>
                <var name ="os.bitness" value ="32"/>
            </else>
        </if>
    </then>
</elseif>
</if>

<echo>OS bitness: ${os.bitness}</echo>

تحرير: كما @GreenieMeanie وأشار إلى أن هذا يتطلب النمل-contrib المكتبة من ant-contrib.sourceforge.net

وهنا هو الجواب الذي يعمل (I اختبارها على كوبونتو 64، ديبيان 32، Windows 2000 و Windows XP) على بدون كما الحاجة تبعيات ANT الخارجية أو اختيارية. وكان يقوم على الجواب @ phatypus ل.

<project name="FindArchitecture" default="check-architecture" basedir=".">

    <!-- Properties set: unix-like (if it is unix or linux), x64 (if it is 64-bits),
         register- size (32 or 64) -->
    <target name="check-architecture" depends="check-family,check-register" >
        <echo>Register size: ${register-size}</echo>
        <echo>OS Family: ${os-family}</echo>
    </target>

    <target name="check-family" >
        <condition property="os-family" value="unix" else="windows">
            <os family="unix" />
        </condition>

        <condition property="unix">
            <os family="unix" />
        </condition>
    </target>

    <target name="check-register" depends="reg-unix,reg-windows">
    </target>

    <!-- Test under GNU/Linux -->
    <target name="reg-unix" if="unix">
        <exec dir="." executable="uname" outputproperty="result">
            <arg line="-m"/>
        </exec>

        <!-- String ends in 64 -->
        <condition property="x64">
            <matches string="${result}" pattern="^.*64$"/>
        </condition>

        <condition property="register-size" value="64" else="32">
            <isset property="x64"/>
        </condition>
    </target>

    <!-- Test under MS/Windows-->
    <target name="reg-windows" unless="unix">
        <!-- 64 bit Windows versions have the variable "ProgramFiles(x86)" -->
        <exec dir="." executable="cmd" outputproperty="result">
            <arg line="/c SET ProgramFiles(x86)"/>
        </exec>

    <!-- String ends in "Program Files (x86)" -->
        <condition property="x64">
            <matches string="${result}" pattern="^.*=.*Program Files \(x86\)"/>
        </condition>

        <condition property="register-size" value="64" else="32">
            <isset property="x64"/>
        </condition>
    </target> 
</project>

يمكنك فقط تمرير معلمة في بناء الملف مع القيمة التي تريدها.على سبيل المثال, إذا الهدف الخاص بك هو dist:

ant -Dbuild.target=32 dist

أو

ant -Dbuild.target=64 dist

ثم في النمل بناء السيناريو ، واتخاذ إجراءات مختلفة اعتمادا على قيمة ${build.target} الملكية (يمكنك أيضا استخدام شروط لتعيين القيمة الافتراضية للخاصية إذا لم يتم تعيين).

أو يمكنك التحقق من قيمة المدمج في خصائص النظام, مثل ${os.arch}.

وراجع للشغل، os.arch (قوس الملكية للعلامة السراج) وصلت ل 64 بت لينكس كان AMD64.

وos.arch لا يعمل بشكل جيد جدا، مقاربة أخرى تطلب من JVM، على سبيل المثال:

    ~$ java -d32 test
    Mon Jun 04 07:05:00 CEST 2007
    ~$ echo $?
    0
    ~$ java -d64 test
    Running a 64-bit JVM is not supported on this platform.
    ~$ echo $?
    1

وهذا يهمني أن يكون في السيناريو أو المجمع.

وعلى افتراض انك تستخدم ANT لبناء تطبيق جافا، لماذا عليك أن تعرف إذا كان قوس 32 بت أو 64 بت؟ نحن يمكن أن تمر دائما المعلمات إلى المهام النمل. وهناك طريقة أنظف يكون لprogrammaticaly تنبعث منها ملف خصائص النظام يستخدمه النملة قبل استدعاء البناء الفعلي. هناك هذا المنصب للاهتمام http://forums.sun.com/thread.jspa؟threadID = 5306174 .

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