最近流行りのビルドツール gradle でOSが32bitか64bitか切り分け方法
対象者
gradle を使っている初心者以上
背景
gradle は単純なビルドツールだけでなく、個人のPCの環境セットアップを助けるツールとしても注目されている。PCの環境は場合によりけりのため簡単に切り分ける手段が求められている
一般的な情報
gradle の環境系で最もよくまとまっているものとして 「Gradle で環境ごとにあれもこれも変更する - bluepapa32’s Java Blog」がある。ここでは、antモジュールを用いて
ant.condition(property: "os", value: "windows") { os(family: "windows") } ant.condition(property: "os", value: "unix" ) { os(family: "unix") }
を定義することで、
ant.properties['os']
に windows, unix(Linux/Mac) の値が入る。antでは考えられないぐらい簡単だ。しかし、eclipseなどはOSの種類だけでなく x86 か ia64 なのかによってもバイナリが異なるものがある。これらを切り分けるには更に深く入りこんでみる。
「How to detect the current OS from gradle - Stack Overflow」 を見てみるとどうも、 前記処理のバックエンドは
org.apache.tools.ant.taskdefs.condition.Os に有るようである。
「GrepCode: org.apache.tools.ant.taskdefs.condition.Os (.java) - Class - Source Code View」
でソースを見ると色々と値がある。試しに利用するソースを書くと、import org.apache.tools.ant.taskdefs.condition.Os結果は、
task checkWin() << { println Os.OS_NAME
println Os.OS_ARCH
println Os.OS_VERSION
println Os.PATH_SEP
}
windows 7なかなか使えるが、パッケージをDLするので環境作成に時間がかかってしまうようにみえる。
x86
6.1
;
ant.condition()は早いのに謎だ。ならもっと簡単な方法はないかと、 Osのコードを見ると、
String OS_ARCH = System.getProperty("os.arch").toLowerCase(Locale.ENGLISH);
と、system propそのまま。わざわざantをって
ant.condition(property: "arch", value: "x86" ) { os(ARCH: "x86") }として
ant.condition(property: "arch", value: "amd64") { os(ARCH: "amd64") }
ant.condition(property: "arch", value: "ia64") { os(ARCH: "ia64") }
ant.properties['arch]
と利用するのもいまいちピンとこない。なので、gradleでもsystem propを使うのがいいかと思う。
ここで、一旦話を撃ち切って、osの種類は取得をantを使わないようにしてみると
public class OSChecker{と書いて、
static public String getFamily(){
String os=System.getProperty("os.name");
if(os==null)
return "";
else if(os.startsWith("Windows"))
return "windows";
else if(os.startsWith("Mac OS X"))
return "mac";
else if(os.startsWith("Linux"))
return "unix";
return ""
}
}
println OSChecker.getFamily()
とすれば、似たようなことはできるが、行数も多くなる。
ant.condition() のほうがシンプルなのは明白
結論
OSの種類は従来の
が最もシンプル。ant.condition(property: "os", value: "windows") { os(family: "windows") } ant.condition(property: "os", value: "unix" ) { os(family: "unix") }
アーキテクチャが32bit、64bitのどちらか判定するのは
System.getProperty("os.arch")で x86, amd64, ia64 を見分けるので十分。
想像以上に単純になる
0 件のコメント:
コメントを投稿