2008-10-20 9 views
18

हमें एक चींटी बिल्ड फ़ाइल विरासत में मिली है लेकिन अब 32 बिट और 64 बिट सिस्टम दोनों को तैनात करने की आवश्यकता है।चींटी आर्किटेक्चर (32 बिट/64 बिट) चींटी के साथ कैसे निर्धारित करें?

गैर-जावा बिट्स GNUMakefiles के साथ किए जाते हैं जहां हम जानकारी प्राप्त करने के लिए बस "uname" कहते हैं। चींटी की नकल करने के लिए क्या ऐसा कोई समान या आसान तरीका है?

उत्तर

10

आप $ {os.arch} के साथ जावा सिस्टम गुण (http://java.sun.com/javase/6/docs/api/java/lang/System.html#getProperties()) पर चींटी से प्राप्त कर सकते हैं। रुचि के अन्य गुण os.name, os.version, sun.cpu.endian, और sun.arch.data.model हो सकते हैं।

+0

धन्यवाद, यह सबसे स्वच्छ दृष्टिकोण की तरह लगता है। कोशिश करेंगे। –

+7

सावधान - $ {os.arch} केवल आपको जेवीएम की बिट-नेस बताता है, मंच नहीं। @ फ़ैटिपस का उत्तर देखें। –

+0

पता करने के लिए अच्छा - धन्यवाद –

3

आप केवल अपनी इच्छित मान के साथ बिल्ड फ़ाइल में पैरामीटर पास कर सकते हैं। उदाहरण के लिए, यदि आपका लक्ष्य dist है:

ant -Dbuild.target=32 dist 

या

ant -Dbuild.target=64 dist 

और फिर अपने चींटी निर्माण स्क्रिप्ट में, ${build.target} संपत्ति के मूल्य के आधार पर विभिन्न कदम उठा (आप भी करने के लिए उपयोग कर सकते हैं conditions संपत्ति के लिए डिफ़ॉल्ट मान सेट करें यदि यह सेट नहीं है)।

या, आप built-insystem properties, जैसे ${os.arch} के मान की जांच कर सकते हैं।

0

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 

कि एक स्क्रिप्ट या एक आवरण में होना होगा।

+1

यह मेरे लिए लिनक्स के तहत काम करता था लेकिन यह विंडोज़ के तहत काम नहीं करता है, हालांकि। –

0

मान लीजिए कि आप जावा एप्लिकेशन बनाने के लिए एएनटी का उपयोग कर रहे हैं, तो आपको यह जानने की आवश्यकता क्यों होगी कि यह 32 बिट आर्क या 64-बिट है? हम हमेशा चींटी कार्यों को पैरामीटर पास कर सकते हैं। वास्तविक निर्माण को कॉल करने से पहले एंटी द्वारा उपयोग की जाने वाली सिस्टम प्रॉपर्टी फ़ाइल प्रोग्रामेटिकल रूप से एक क्लीनर तरीका होगा। इस दिलचस्प पोस्ट http://forums.sun.com/thread.jspa?threadID=5306174 है।

+0

ओरेकल ने जावा मंचों पर कब्जा करते समय थ्रेड लिंक तोड़ दिया। क्या आप धागा पा सकते हैं और लिंक को ठीक कर सकते हैं? –

11

पार्टी, लेकिन क्या बिल्ली के लिए देर हो चुकी ...

$ {os.arch} केवल आपको बताता है कि JVM 32/64 बिट है। आप 64 बिट ओएस पर 32 बिट जेवीएम चला रहे हैं। इस प्रयास करें:

<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 के रूप में कहे अनुसार, इस ant-contrib.sourceforge.net

+0

मुझे एक पर्यावरण संपत्ति नहीं मिल रही है जो विंडोज के सभी संस्करणों में काम करती है। उदाहरण के लिए, प्रोग्रामफाइल (x86) विंडोज 2000 या विंडोज एक्सपी के तहत मौजूद नहीं है ... लिनक्स के लिए यह बहुत अच्छा काम करता है। उस पर कोई अन्य विचार? –

+0

दरअसल, अगर मैं अपनी लिपि सही तरीके से पढ़ रहा हूं, तो वह इस तथ्य पर भरोसा कर रहा है कि प्रोग्रामफाइल (x86) पर्यावरण चर 32 बिट विंडोज़ पर मौजूद नहीं है। –

+0

@ माइकनेलसन - सही। – phatypus

1

से चींटी-योगदान पुस्तकालय BTW की आवश्यकता है, os.arch (के कट्टर संपत्ति ओएस टैग) मैं 64-बिट लिनक्स के लिए मिला amd64 था।

7

यहां एक ऐसा उत्तर है जो काम करता है (मैंने कुबंटू 64, डेबियन 32, विंडोज 2000 और विंडोज एक्सपी पर परीक्षण किया) बाहरी या वैकल्पिक एएनटी निर्भरताओं की आवश्यकता के बिना। यह @ फ़ैटिपस के उत्तर पर आधारित था।

<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> 
+1

विंडोज 7 64 के लिए काम करता है – Chris