Mise à jour mi-2020 : toujours en incubation:
OperatingSystem os = org.gradle.nativeplatform.platform.internal.DefaultNativePlatform.currentOperatingSystem;
Mise à jour début 2019 : current()
supprimée.
org.gradle.nativeplatform.platform.OperatingSystem.getDisplayName()
org.gradle.nativeplatform.platform.OperatingSystem.isLinux()
Gardez à l'esprit qu'il est toujours en incubation .
Mise à jour mi-2018 : tout comme cela a été mentionné dans les commentaires, cette classe est maintenant déplacée vers un package différent, il faut donc utiliserorg.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 relativement plus facile dans Maven. Mais gardez à l'esprit que ce org.apache.tools.ant.taskdefs.condition.Os.isFamily
n'est pas exclusif dans le sens où s'il renvoie true avec un paramètre particulier, cela ne signifie pas nécessairement qu'il renvoie false 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))
}
}
Cela reviendra vrai à la fois pour Os.FAMILY_MAC
et Os.FAMILY_UNIX
sur MacOS. Ce n'est généralement pas quelque chose dont vous avez besoin dans les scripts de construction.
Il existe cependant un autre moyen d'y parvenir en utilisant l'API Gradle 2+, à savoir:
import org.gradle.internal.os.OperatingSystem;
task detect {
doLast {
println(OperatingSystem.current().isMacOsX())
println(OperatingSystem.current().isLinux())
}
}
Consultez la documentation de l' interface org.gradle.nativeplatform.platform.OperatingSystem . Il convient de mentionner que cette interface est marquée d'une annotation d' incubation , c'est-à-dire que "la fonctionnalité est actuellement en cours de travail et peut changer à tout moment". L'espace de noms "interne" dans l'implémentation nous donne également une indication que nous devrions l'utiliser en sachant que cela peut changer.
Mais personnellement, j'irais avec cette solution. C'est juste qu'il vaut mieux écrire une classe wrapper pour ne pas gâcher au cas où quelque chose changerait dans le futur.
toLowerCase().contains()
pièce, car j'ai juste besoin du nom.