Actualización de mediados de 2020 : Todavía incubando:
OperatingSystem os = org.gradle.nativeplatform.platform.internal.DefaultNativePlatform.currentOperatingSystem;
Actualización de principios de 2019 :current()
eliminada.
org.gradle.nativeplatform.platform.OperatingSystem.getDisplayName()
org.gradle.nativeplatform.platform.OperatingSystem.isLinux()
Sin embargo, tenga en cuenta que todavía está incubando .
Actualización de mediados de 2018 : tal como se mencionó en los comentarios, ahora esta clase se movió a un paquete diferente, por lo que se debe usarorg.gradle.nativeplatform.platform.OperatingSystem.current()
A mediados de 2015, la respuesta de Peter Kahn sigue siendo válida. La activación del perfil basada en el entorno sigue siendo algo relativamente más fácil en Maven. Pero tenga en cuenta que org.apache.tools.ant.taskdefs.condition.Os.isFamily
no es exclusivo en el sentido de que si devuelve verdadero con un parámetro en particular, no necesariamente significa que devuelve falso para cualquier otro parámetro. Por ejemplo:
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))
}
}
Se volverá cierto tanto para Os.FAMILY_MAC
y Os.FAMILY_UNIX
en MacOS. Por lo general, no es algo que necesite en los scripts de compilación.
Sin embargo, hay otra forma de lograr esto usando Gradle 2+ API, a saber:
import org.gradle.internal.os.OperatingSystem;
task detect {
doLast {
println(OperatingSystem.current().isMacOsX())
println(OperatingSystem.current().isLinux())
}
}
Consulte la documentación de la interfaz org.gradle.nativeplatform.platform.OperatingSystem . Vale la pena mencionar que esta interfaz está marcada con una anotación de incubación , es decir, "la característica es actualmente un trabajo en progreso y puede cambiar en cualquier momento". El espacio de nombres "interno" en la implementación también nos da una pista de que debemos usar esto sabiendo que esto puede cambiar.
Pero personalmente iría con esta solución. Es solo que es mejor escribir una clase contenedora para no estropear en caso de que algo cambie en el futuro.
toLowerCase().contains()
pieza, ya que solo necesito el nombre.