如何从gradle中检测当前操作系统

我发现这个如何与groovy做的答案:

通过groovy / grails检测平台(Window或Linux) :

if (System.properties['os.name'].toLowerCase().contains('windows')) { println "it's Windows" } else { println "it's not Windows" } 

有没有更好的办法?

其实我看了一下gradle项目,看起来有点干净,因为它使用了ant现有的结构

 import org.apache.tools.ant.taskdefs.condition.Os task checkWin() << { if (Os.isFamily(Os.FAMILY_WINDOWS)) { println "*** WINDOWS " } } 

我在下面的gradle分支中发现了它,它似乎很好地工作gradle / gradle-core / branches / RB-0.3 / build.gradle

截至2015年夏季,彼得·卡恩的答案仍然有效。 在maven中基于环境的configuration文件激活仍然是相对容易的。 但是请记住, org.apache.tools.ant.taskdefs.condition.Os.isFamily并不是唯一的,如果它返回一个特定的参数为真,它不是必须的,这意味着它返回任何其他参数的假。 例如:

 import org.apache.tools.ant.taskdefs.condition.Os task detect { doLast { println(Os.isFamily(Os.FAMILY_WINDOWS)) println(Os.isFamily(Os.FAMILY_MAC)) println(Os.isFamily(Os.FAMILY_UNIX)) } } 

将在MacOS上为Os.FAMILY_MACOs.FAMILY_UNIX返回true。 通常这不是你在构build脚本中需要的东西。

使用gradle 2+ API还有另一种方法来实现这个function,即:

 import org.gradle.internal.os.OperatingSystem; task detect { doLast { println(OperatingSystem.current().isMacOsX()) println(OperatingSystem.current().isLinux()) } } 

查看org.gradle.nativeplatform.platform.OperatingSystem接口的文档。 值得一提的是,该界面标有孵化注释,即“该function目前正在进行中,可能随时更改”。 实施中的“内部”命名空间也给了我们一个暗示,即我们应该知道这可以改变。

但是,我个人会采用这个解决scheme。 只是写一个包装类最好不要让事情在未来发生变化。

人们可以区分Linux,Unix,Windows和OSX之间的构build环境 – 而Gradle nativeplatform.platform.OperatingSystem与目标环境(包括FreeBSD和Solaris)有所不同。

 String osName = org.gradle.internal.os.OperatingSystem.current().getName(); String osVersion = org.gradle.internal.os.OperatingSystem.current().getVersion(); println "*** $osName $osVersion was detected." if (org.gradle.internal.os.OperatingSystem.current().isLinux()) { // consider Linux. } else if (org.gradle.internal.os.OperatingSystem.current().isUnix()) { // consider UNIX. } else if (org.gradle.internal.os.OperatingSystem.current().isWindows()) { // consider Windows. } else if (org.gradle.internal.os.OperatingSystem.current().isMacOsX()) { // consider OSX. } else { // unknown OS. } 

Gradle不提供用于检测操作系统的公共API。 因此, os. 系统属性是你最好的select。