Обновление середины 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()
детали, так как мне просто нужно название.