Mitte 2020 Update : Noch inkubiert:
OperatingSystem os = org.gradle.nativeplatform.platform.internal.DefaultNativePlatform.currentOperatingSystem;
Anfang 2019 Update : current()
entfernt.
org.gradle.nativeplatform.platform.OperatingSystem.getDisplayName()
org.gradle.nativeplatform.platform.OperatingSystem.isLinux()
Denken Sie daran, dass es immer noch inkubiert .
Mitte 2018 Update : Genau wie in den Kommentaren erwähnt, wurde diese Klasse jetzt in ein anderes Paket verschoben, daher sollte man es verwendenorg.gradle.nativeplatform.platform.OperatingSystem.current()
Ab Mitte 2015 ist die Antwort von Peter Kahn noch gültig. Die umgebungsbasierte Profilaktivierung ist in Maven immer noch relativ einfach. Beachten Sie jedoch, dass dies org.apache.tools.ant.taskdefs.condition.Os.isFamily
nicht in dem Sinne exklusiv ist, dass wenn es mit einem bestimmten Parameter true zurückgibt, dies nicht unbedingt bedeutet, dass es für jeden anderen Parameter false zurückgibt. Zum Beispiel:
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))
}
}
Es wird sowohl für Os.FAMILY_MAC
als auch Os.FAMILY_UNIX
unter MacOS true zurückgeben . Normalerweise benötigen Sie dies nicht für Build-Skripte.
Es gibt jedoch eine andere Möglichkeit, dies mithilfe der Gradle 2+ -API zu erreichen:
import org.gradle.internal.os.OperatingSystem;
task detect {
doLast {
println(OperatingSystem.current().isMacOsX())
println(OperatingSystem.current().isLinux())
}
}
Lesen Sie die Dokumentation zur Schnittstelle org.gradle.nativeplatform.platform.OperatingSystem . Es ist erwähnenswert, dass diese Schnittstelle mit Inkubationsanmerkungen gekennzeichnet ist, dh "Die Funktion ist derzeit in Arbeit und kann jederzeit geändert werden". Der "interne" Namespace in der Implementierung gibt uns auch einen Hinweis, dass wir diesen verwenden sollten, da wir wissen, dass sich dies ändern kann.
Aber ich persönlich würde mich für diese Lösung entscheiden. Es ist nur besser, eine Wrapper-Klasse zu schreiben, um nicht durcheinander zu kommen, falls sich in Zukunft etwas ändern sollte.
toLowerCase().contains()
Teil benutze, da ich nur den Namen brauche.