如何从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_MAC
和Os.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。
- Apache HttpClient Android(Gradle)
- 如何在不公开展示源代码的情况下使用Gradle创buildAndroid库Jar?
- 如何设置Gradle的AAR输出的名称
- 无法实例化应用程序com.android.tools.fd.runtime.BootstrapApplication?Android
- 通过Eclipse错误运行Gradle项目“system can not find System Java Compiler”
- BuildConfig未正确创build(Gradle Android)
- 将github库作为依赖添加到Android-Studio项目中
- Android Studio更新后,Gradle项目刷新失败
- 重置gradle任务的UP-TO-DATE属性?