Оновлення в середині 2020 року : все ще інкубується:
OperatingSystem os = org.gradle.nativeplatform.platform.internal.DefaultNativePlatform.currentOperatingSystem;
Оновлення на початку 2019 року : current()
вилучено.
org.gradle.nativeplatform.platform.OperatingSystem.getDisplayName()
org.gradle.nativeplatform.platform.OperatingSystem.isLinux()
Майте на увазі, що це все ще інкубує .
Оновлення в середині 2018 року : так само, як це було згадано в коментарях, тепер цей клас перейшов на інший пакет, тому його слід використовуватиorg.gradle.nativeplatform.platform.OperatingSystem.current()
Станом на середину 2015 року відповідь Пітера Кана все ще діє. Активація профілів на основі середовища все ще робиться порівняно простіше у Maven. Але майте на увазі, що org.apache.tools.ant.taskdefs.condition.Os.isFamily
це не ексклюзивно в тому сенсі, що якщо воно повертає true з одним конкретним параметром, це не обов'язково означає, що воно повертає false для будь-якого іншого параметра. Наприклад:
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))
}
}
Вона повертає істину як для Os.FAMILY_MAC
і Os.FAMILY_UNIX
на MacOS. Зазвичай це не те, що потрібно у сценаріях побудови.
Існує хоч інший спосіб досягти цього за допомогою API Gradle 2+, а саме:
import org.gradle.internal.os.OperatingSystem;
task detect {
doLast {
println(OperatingSystem.current().isMacOsX())
println(OperatingSystem.current().isLinux())
}
}
Ознайомтеся з документацією щодо інтерфейсу org.gradle.nativeplatform.platform.OperatingSystem . Варто зазначити, що цей інтерфейс позначений інкубаційними анотаціями, тобто "функція в даний час знаходиться в стадії розробки і може змінитися в будь-який час". "Внутрішній" простір імен у реалізації також дає нам підказку, що ми повинні використовувати це, знаючи, що це може змінитися.
Але особисто я б погодився з цим рішенням. Просто краще написати клас обгортки, щоб не псувати, якщо щось зміниться в майбутньому.
toLowerCase().contains()
частини, оскільки мені просто потрібна назва.