如何用ant确定构建架构(32bit / 64bit)?

我们inheritance了一个ant构建文件,但现在需要部署到32位和64位系统。

非Java位是用GNUMakefiles完成的,我们只需要调用“uname”来获取信息。 是否有类似甚至更简单的方法来模仿ant?

你可以使用$ {os.arch}从ant获取java系统属性( http://java.sun.com/javase/6/docs/api/java/lang/System.html#getProperties() )。 其他感兴趣的属性可能是os.name,os.version,sun.cpu.endian和sun.arch.data.model。

迟到了,但到底是什么……

$ {os.arch}仅告诉您JVM是否为32/64位。 您可能正在64位操作系统上运行32位JVM。 尝试这个:

                                   OS bitness: ${os.bitness} 

编辑:正如@GreenieMeanie所指出的,这需要来自ant-contrib.sourceforge.net的ant-contrib库。

这是一个有效的答案(我在Kubuntu 64,Debian 32,Windows 2000和Windows XP上测试过),无需外部或可选的ANT依赖。 它基于@ phatypus的回答。

    Register size: ${register-size} OS Family: ${os-family}                                        

您可以使用所需的值将参数传递到构建文件中。 例如,如果你的目标是dist

 ant -Dbuild.target=32 dist 

要么

 ant -Dbuild.target=64 dist 

然后在Ant构建脚本中,根据${build.target}属性的值执行不同的操作(如果未设置属性,还可以使用条件为属性设置默认值)。

或者,您可以检查内置 系统属性的值 ,例如${os.arch}

顺便说一下,我为64位Linux获得的os.arch(os标签的arch属性)是amd64。

os.arch不能很好地工作,另一种方法是询问JVM,例如:

     〜$ java -d32测试
     Mon Jun 04 07:05:00 CEST 2007
     〜$ echo $?
     0
     〜$ java -d64测试
    此平台不支持运行64位JVM。
     〜$ echo $?
     1

这必须是在脚本或包装器中。

假设您使用ANT构建Java应用程序,为什么需要知道它是32位arch还是64位? 我们总是可以将参数传递给ant任务。 更简洁的方法是在调用实际构建之前以编程方式发出Ant使用的系统属性文件。 这篇有趣的posthttp://forums.sun.com/thread.jspa?threadID=5306174 。