差異處

這裏顯示兩個版本的差異處。

連向這個比對檢視

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~~