差異處
這裏顯示兩個版本的差異處。
java:ant:check32or64byant [2013/02/24 00:22] tony 建立 |
java:ant:check32or64byant [2023/06/25 09:48] |
||
---|---|---|---|
行 1: | 行 1: | ||
- | {{tag>Ant}} | ||
- | ====== 如何在Ant中辨別OS是使用32位元還是64位元? ====== | ||
- | 一開始想說可以透過os.arch去判斷, | ||
- | 但發現os.arch值是跟著JVM的! | ||
- | 舉例而言: | ||
- | 64-bit JVM值可能會顯示x64, amd64 or x86_64 | ||
- | 32-bit JVM值會顯示x86 or i386 | ||
- | |||
- | 這會導致無法正確判斷使用者的OS是哪一種Arch. | ||
- | |||
- | 經過小弟研究與Swind討論出一個可以在Windows2008、Windows2003、Win7、SLES、RHEL、Ubuntu、CentOS上正確取得Arch的方法, 並且簡單! | ||
- | 如下: | ||
- | <code xml> | ||
- | <project name="project"> | ||
- | <target name="checkOS"> | ||
- | <condition property="os.linux"> | ||
- | <os family="unix" /> | ||
- | </condition> | ||
- | <condition property="os.windows"> | ||
- | <os family="windows" /> | ||
- | </condition> | ||
- | <echo>linux:${os.linux}</echo> | ||
- | <echo>windows:${os.windows}</echo> | ||
- | </target> | ||
- | <target name="getLinuxBit" depends="checkOS" if="os.linux"> | ||
- | <exec executable="/bin/bash" outputproperty="linux-bit"> | ||
- | <arg value="-c" /> | ||
- | <arg value="getconf LONG_BIT" /> | ||
- | </exec> | ||
- | <echo>linux bit=${linux-bit}</echo> | ||
- | </target> | ||
- | <target name="checkOSBit" depends="getLinuxBit"> | ||
- | <property environment="env" /> | ||
- | <condition property="os.32"> | ||
- | <or> | ||
- | <equals arg1="${linux-bit}" arg2="32" /> | ||
- | <and> | ||
- | <os family="windows" /> | ||
- | <not> | ||
- | <contains string="${env.ProgramFiles(x86)}" | ||
- | substring="Program Files (x86)" /> | ||
- | </not> | ||
- | </and> | ||
- | </or> | ||
- | </condition> | ||
- | <condition property="os.64"> | ||
- | <or> | ||
- | <contains string="${env.ProgramFiles(x86)}" | ||
- | substring="Program Files (x86)" /> | ||
- | <equals arg1="${linux-bit}" arg2="64" /> | ||
- | </or> | ||
- | </condition> | ||
- | <echo>os.64:${os.64}</echo> | ||
- | <echo>os.32:${os.32}</echo> | ||
- | </target> | ||
- | </project> | ||
- | </code> | ||
- | 有更簡單的方法請指教一下! | ||
- | |||
- | 曾看過某OpenSource的C程式, 透過判斷SysWOW64來確認是否為64bit-Windows. 我想直接透過系統環境變數判斷也是一種不錯選擇! 在Linux部分曾想過抓HOSTTYPE來判斷, 但在ant執行時居然取得不到這個環境變數! 最後只好透過getconfig的方式. | ||
- | |||
- | ===== ===== | ||
- | ---- | ||
- | \\ | ||
- | ~~DISQUS~~ |