Cập nhật giữa năm 2020 : Vẫn đang ấp ủ:
OperatingSystem os = org.gradle.nativeplatform.platform.internal.DefaultNativePlatform.currentOperatingSystem;
Bản cập nhật đầu năm 2019 : current()
đã bị gỡ bỏ.
org.gradle.nativeplatform.platform.OperatingSystem.getDisplayName()
org.gradle.nativeplatform.platform.OperatingSystem.isLinux()
Hãy nhớ rằng nó vẫn đang ấp .
Cập nhật giữa năm 2018 : giống như nó đã được đề cập trong các nhận xét, bây giờ lớp này đã chuyển sang một gói khác, vì vậy bạn nên sử dụngorg.gradle.nativeplatform.platform.OperatingSystem.current()
Tính đến giữa năm 2015, câu trả lời của Peter Kahn vẫn còn nguyên giá trị. Kích hoạt hồ sơ dựa trên môi trường vẫn là một cái gì đó được thực hiện tương đối dễ dàng hơn trong Maven. Nhưng hãy nhớ rằng điều đó org.apache.tools.ant.taskdefs.condition.Os.isFamily
không độc quyền theo nghĩa là nếu nó trả về true với một tham số cụ thể thì nó không nhất thiết có nghĩa là nó trả về false cho bất kỳ tham số nào khác. Ví dụ:
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))
}
}
Nó sẽ trả về true cho cả MacOS Os.FAMILY_MAC
và Os.FAMILY_UNIX
trên MacOS. Thông thường, nó không phải là thứ bạn cần trong các kịch bản xây dựng.
Mặc dù có một cách khác để đạt được điều này bằng cách sử dụng API Gradle 2+, đó là:
import org.gradle.internal.os.OperatingSystem;
task detect {
doLast {
println(OperatingSystem.current().isMacOsX())
println(OperatingSystem.current().isLinux())
}
}
Kiểm tra tài liệu về giao diện org.gradle.nativeplatform.platform.OperatingSystem . Điều đáng nói là giao diện này được đánh dấu bằng chú thích ấp ủ , đó là, "tính năng hiện đang được hoàn thiện và có thể thay đổi bất cứ lúc nào". Không gian tên "nội bộ" trong việc triển khai cũng cho chúng ta một gợi ý rằng chúng ta nên sử dụng vùng này khi biết rằng điều này có thể thay đổi.
Nhưng cá nhân tôi sẽ đi với giải pháp này. Nó chỉ là tốt hơn nên viết một lớp wrapper để không làm rối tung lên trong trường hợp một cái gì đó sẽ thay đổi trong tương lai.
toLowerCase().contains()
phần, vì tôi chỉ cần tên.