Aktualizacja z połowy 2020 r . : Nadal inkubacja:
OperatingSystem os = org.gradle.nativeplatform.platform.internal.DefaultNativePlatform.currentOperatingSystem;
Aktualizacja z początku 2019 r . : current()
usunięta.
org.gradle.nativeplatform.platform.OperatingSystem.getDisplayName()
org.gradle.nativeplatform.platform.OperatingSystem.isLinux()
Pamiętaj, że nadal się inkubuje .
Aktualizacja z połowy 2018 r . : tak jak wspomniano w komentarzach, teraz ta klasa została przeniesiona do innego pakietu, więc należy użyćorg.gradle.nativeplatform.platform.OperatingSystem.current()
Od połowy 2015 roku odpowiedź Petera Kahna jest nadal aktualna. Aktywacja profilu oparta na środowisku jest nadal czymś stosunkowo łatwiejszym w Maven. Należy jednak pamiętać, że org.apache.tools.ant.taskdefs.condition.Os.isFamily
nie jest to wykluczające w tym sensie, że jeśli zwraca prawdę z jednym określonym parametrem, niekoniecznie oznacza, że zwraca fałsz dla dowolnego innego parametru. Na przykład:
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))
}
}
Zwróci prawdę zarówno na MacOS, jak Os.FAMILY_MAC
i Os.FAMILY_UNIX
na MacOS. Zwykle nie jest to coś, czego potrzebujesz w skryptach kompilacji.
Jest jednak inny sposób osiągnięcia tego za pomocą Gradle 2+ API, a mianowicie:
import org.gradle.internal.os.OperatingSystem;
task detect {
doLast {
println(OperatingSystem.current().isMacOsX())
println(OperatingSystem.current().isLinux())
}
}
Sprawdź dokumentację interfejsu org.gradle.nativeplatform.platform.OperatingSystem . Warto wspomnieć, że ten interfejs jest oznaczony inkubacją adnotacją , czyli „funkcja jest obecnie w toku i może ulec zmianie w dowolnym momencie”. „Wewnętrzna” przestrzeń nazw w implementacji również daje nam wskazówkę, że powinniśmy z niej korzystać, wiedząc, że może się to zmienić.
Ale osobiście wybrałbym to rozwiązanie. Po prostu lepiej jest napisać klasę opakowującą, aby nie zepsuć na wypadek, gdyby coś się zmieniło w przyszłości.
toLowerCase().contains()
części, ponieważ potrzebuję tylko nazwy.