Mise à jour mi-2020 : Toujours en incubation :
OperatingSystem os = org.gradle.nativeplatform.platform.internal.DefaultNativePlatform.currentOperatingSystem;
Mise à jour début 2019 : current()
retiré.
org.gradle.nativeplatform.platform.OperatingSystem.getDisplayName()
org.gradle.nativeplatform.platform.OperatingSystem.isLinux()
Gardez à l'esprit que c'est toujours incubation cependant.
Mise à jour de la mi-2018 : comme cela a été mentionné dans les commentaires, cette classe a été déplacée dans un paquet différent, donc il faut utiliser org.gradle.nativeplatform.platform.OperatingSystem.current()
À la mi-2015, la réponse de Peter Kahn est toujours valable. L'activation de profil basée sur l'environnement est toujours quelque chose de fait relativement plus facilement dans Maven. Mais gardez à l'esprit que org.apache.tools.ant.taskdefs.condition.Os.isFamily
n'est pas exclusif dans le sens où s'il retourne vrai avec un paramètre particulier, cela ne signifie pas nécessairement qu'il retourne faux pour tout autre paramètre. Par exemple :
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))
}
}
Il retournera vrai à la fois pour Os.FAMILY_MAC
y Os.FAMILY_UNIX
sur MacOS. Habituellement, ce n'est pas quelque chose dont vous avez besoin dans la construction scripts.
Il existe cependant un autre moyen d'y parvenir en utilisant l'API de Gradle 2+, à savoir :
import org.gradle.internal.os.OperatingSystem;
task detect {
doLast {
println(OperatingSystem.current().isMacOsX())
println(OperatingSystem.current().isLinux())
}
}
Consultez la documentation relative à la org.gradle.nativeplatform.platform.OperatingSystem interface. Il convient de mentionner que cette interface est marquée par le symbole incubation c'est-à-dire "la fonctionnalité est actuellement en cours de réalisation et peut être modifiée à tout moment". L'espace de nom "interne" dans l'implémentation nous donne également un indice que nous devrions utiliser cette fonctionnalité en sachant qu'elle peut changer.
Mais personnellement, j'opterais pour cette solution. C'est juste qu'il est préférable d'écrire une classe enveloppe pour ne pas se planter au cas où quelque chose changerait dans le futur.