Tính đến mùa hè'2015, câu trả lời của Peter Kahn vẫn còn hiệu lực. Môi trường dựa trên kích hoạt hồ sơ vẫn còn một cái gì đó thực hiện tương đối dễ dàng hơn trong maven. Nhưng hãy nhớ rằng org.apache.tools.ant.taskdefs.condition.Os.isFamily
không độc quyền theo nghĩa rằng nếu nó trả về true với một tham số cụ thể thì không cần thiết nghĩa là nó trả về false cho bất kỳ param 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))
}
}
Sẽ trả lại đúng cả hai cho Os.FAMILY_MAC
và Os.FAMILY_UNIX
trên MacOS. Thông thường nó không phải là một cái gì đó bạn cần trong xây dựng kịch bản.
Có dù một cách khác để đạt được điều này sử dụng API 2+ gradle, cụ thể là:
import org.gradle.internal.os.OperatingSystem;
task detect {
doLast {
println(OperatingSystem.current().isMacOsX())
println(OperatingSystem.current().isLinux())
}
}
Check-out doc cho giao diện org.gradle.nativeplatform.platform.OperatingSystem. Điều đáng nói đến là giao diện này được đánh dấu bằng chú thích incubating, đó là "đối tượng địa lý hiện đang được tiến hành và có thể thay đổi bất kỳ lúc nào". Không gian tên "nội bộ" trong triển khai cũng cho chúng ta một gợi ý rằng chúng ta nên biết điều này khi biết rằng điều này có thể thay đổi.
Nhưng cá nhân tôi muốn đi với giải pháp này. Nó chỉ là tốt hơn để viết một lớp wrapper không mess up trong trường hợp một cái gì đó sẽ thay đổi trong tương lai.
đó là những gì tôi sử dụng, không có phần 'toLowerCase(). Contains()', vì tôi chỉ cần tên. –
Bạn cũng có thể nhận được phiên bản hệ điều hành, với 'System.getProperty ('os.arch')' –
'" WINDOWS ". ToLowerCase()' là phụ thuộc vào miền địa phương và sẽ trả về 'wındows' (chú ý không có dấu chấm) trên máy ngôn ngữ là tiếng Thổ Nhĩ Kỳ. Sử dụng 'toLowerCase (Locale.ROOT)' thay vì ở bên an toàn. –