Encontré esta respuesta sobre cómo hacerlo con Groovy:
Detectando la plataforma (Windows o Linux) por Groovy / Grails :
if (System.properties['os.name'].toLowerCase().contains('windows')) {
println "it's Windows"
} else {
println "it's not Windows"
}
¿Existe una forma mejor?
toLowerCase().contains()
pieza, ya que solo necesito el nombre.System.getProperty('os.arch')
"WINDOWS".toLowerCase()
depende de la configuración regional y volveráwındows
(observe la i sin puntos) en las máquinas donde la configuración regional es turca. Úselo en sutoLowerCase(Locale.ROOT)
lugar para estar seguro.Respuestas:
En realidad, miré el proyecto Gradle, y este se ve un poco más limpio ya que usa la estructura existente de Ant :
Encontré esto en la siguiente rama de Gradle y parece funcionar bien. gradle / gradle-core / branch / RB-0.3 / build.gradle
fuente
task checkWin() << {
¿Por qué lo necesitas? simplemente puede escribirif (Os.isFamily(Os.FAMILY_WINDOWS)) { println "*** WINDOWS " }
org.gradle.internal.os.OperatingSystem
yif (OperatingSystem.current() == OperatingSystem.WINDOWS)
(si hablamos de Gradle, ¿por qué no usar sus propias implementaciones)?Actualización de mediados de 2020 : Todavía incubando:
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 usar
org.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:Se volverá cierto tanto para
Os.FAMILY_MAC
yOs.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:
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.
fuente
OperatingSystem
no parece tenerlo.current()
org.gradle.internal.os.OperatingSystem.current()
OperatingSystem
sincurrent()
?OperatingSystem os = org.gradle.nativeplatform.platform.internal.DefaultNativePlatform.currentOperatingSystem
; Ojalá hubiera uno público @PeterNiederwieserSe puede diferenciar el entorno de compilación entre Linux, Unix, Windows y OS X, mientras que Gradle nativeplatform.platform.OperatingSystem diferencia el entorno de destino (incluidos FreeBSD y Solaris ).
También se puede usar una tarea Ant ( fuente ):
fuente
Gradle no proporciona una API pública para detectar el sistema operativo. Por lo tanto, las
os.
propiedades del sistema son su mejor opción.fuente
O puede definir osName como una cadena ...
... y utilícelo más tarde, para incluir una biblioteca nativa, por ejemplo:
Pero no cambiaría nada ya que OperatingSystem funciona exactamente como tu código:
Fuente: https://github.com/gradle/gradle/blob/master/subprojects/base-services/src/main/java/org/gradle/internal/os/OperatingSystem.java
Editar:
Puedes hacer lo mismo con la arquitectura:
y:
Solo tenga en cuenta que getArch () devolverá:
getArch () devolverá "x86" en Solaris o "i386" para cualquier otra plataforma.
Edición 2:
O si desea evitar cualquier importación, simplemente puede hacerlo usted mismo:
fuente
No me gusta detectar el sistema operativo en Gradle a través de propiedades o una tarea Ant, y la
OperatingSystem
clase ya no contiene elcurrent()
método.Entonces, en mi opinión, la forma más limpia de detectar el sistema operativo sería:
Importar DefaultNativePlatform:
Luego use
DefaultNativePlatform
en su tarea:Tenga en cuenta que este método no es ideal, ya que utiliza la API interna de Gradle.
Fue probado con Gradle 4.10.
fuente