Począwszy od lata'2015, odpowiedź Petera Kahna jest nadal aktualna. Aktywacja profilu w oparciu o środowisko jest nadal czymś, co można zrobić stosunkowo łatwiej w maven. Należy jednak pamiętać, że org.apache.tools.ant.taskdefs.condition.Os.isFamily
nie jest wyłączny w tym sensie, że jeśli zwraca true z jednym konkretnym parametrem, nie oznacza to, że zwraca on wartość false 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 true zarówno dla Os.FAMILY_MAC
i Os.FAMILY_UNIX
na MacOS. Zwykle nie jest to coś, czego potrzebujesz w skryptach kompilacji.
Istnieje jednak inny sposób na osiągnięcie tego przy użyciu Gradle 2+ API, a mianowicie:
import org.gradle.internal.os.OperatingSystem;
task detect {
doLast {
println(OperatingSystem.current().isMacOsX())
println(OperatingSystem.current().isLinux())
}
}
odjazdu doc dla org.gradle.nativeplatform.platform.OperatingSystem interfejsu. Warto wspomnieć, że ten interfejs jest oznaczony adnotacją incubating, czyli "funkcja jest aktualnie w toku i może się zmienić w dowolnym momencie". "Wewnętrzna" przestrzeń nazw w implementacji daje nam również wskazówkę, że powinniśmy to wiedzieć, wiedząc, że to się może zmienić.
Osobiście jednak skorzystam z tego rozwiązania. Chodzi o to, że lepiej napisać klasę wrappera, żeby nie zepsuć na wypadek, gdyby coś zmieniło się w przyszłości.
to jest to, czego używam, bez części 'toLowerCase(). Zawiera()', ponieważ po prostu potrzebuję nazwy. –
Możesz także pobrać wersję systemu operacyjnego z 'System.getProperty ('os.arch')' –
'" WINDOWS ".toLowerCase()' jest zależne od ustawień regionalnych i zwróci 'wındows' (zwróć uwagę na kropkę i) na komputerach, gdzie lokalizacja jest turecka. Zamiast tego używaj 'toLowerCase (Locale.ROOT)' po bezpiecznej stronie. –