หรือคุณสามารถกำหนด osName เป็นสตริง ...
import org.gradle.internal.os.OperatingSystem
switch (OperatingSystem.current()) {
case OperatingSystem.LINUX:
project.ext.osName = "Linux";
break;
case OperatingSystem.MAC_OS:
project.ext.osName = "macOS";
break;
case OperatingSystem.WINDOWS:
project.ext.osName = "Windows";
break;
}
... และใช้ในภายหลัง - เพื่อรวมไลบรารีดั้งเดิมเช่น:
run {
systemProperty "java.library.path", "lib/$osName"
}
แต่จะไม่เปลี่ยนแปลงอะไรเนื่องจาก OperatingSystem ทำงานเหมือนกับโค้ดของคุณ:
public static OperatingSystem forName(String os) {
String osName = os.toLowerCase();
if (osName.contains("Windows")) {
return WINDOWS;
} else if (osName.contains("mac os x") || osName.contains("darwin") || osName.contains("osx")) {
return MAC_OS;
} else if (osName.contains("sunos") || osName.contains("solaris")) {
return SOLARIS;
} else if (osName.contains("linux")) {
return LINUX;
} else if (osName.contains("freebsd")) {
return FREE_BSD;
} else {
// Not strictly true
return UNIX;
}
}
ที่มา: https://github.com/gradle/gradle/blob/master/subprojects/base-services/src/main/java/org/gradle/internal/os/OperatingSystem.java
แก้ไข:
คุณสามารถทำเช่นเดียวกันสำหรับสถาปัตยกรรม:
project.ext.osArch = OperatingSystem.current().getArch();
if ("x86".equals(project.ext.osArch)) {
project.ext.osArch = "i386";
}
และ:
run {
systemProperty "java.library.path", "lib/$osName/$osArch"
}
โปรดทราบว่า getArch () จะส่งคืน:
- "ppc" บน PowerPC
- "amd64" บน 64b
- "i386" หรือ "x86" บน 32b
getArch () จะส่งคืน "x86" บน Solaris หรือ "i386" สำหรับแพลตฟอร์มอื่น ๆ
แก้ไข 2:
หรือหากคุณต้องการหลีกเลี่ยงการนำเข้าใด ๆ คุณสามารถทำได้ด้วยตัวเอง:
def getOsName(project) {
final String osName = System.getProperty("os.name").toLowerCase();
if (osName.contains("linux")) {
return ("linux");
} else if (osName.contains("mac os x") || osName.contains("darwin") || osName.contains("osx")) {
return ("macos");
} else if (osName.contains("windows")) {
return ("windows");
} else if (osName.contains("sunos") || osName.contains("solaris")) {
return ("solaris");
} else if (osName.contains("freebsd")) {
return ("freebsd");
}
return ("unix");
}
def getOsArch(project) {
final String osArch = System.getProperty("os.arch");
if ("x86".equals(osArch)) {
return ("i386");
}
else if ("x86_64".equals(osArch)) {
return ("amd64");
}
else if ("powerpc".equals(osArch)) {
return ("ppc");
}
return (osArch);
}
toLowerCase().contains()
ส่วนเพราะฉันแค่ต้องการชื่อ