Atau Anda dapat mendefinisikan osName sebagai string ...
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;
}
... dan gunakan nanti - untuk menyertakan perpustakaan asli misalnya:
run {
systemProperty "java.library.path", "lib/$osName"
}
Tetapi itu tidak akan mengubah apa pun karena OperatingSystem bekerja persis seperti kode Anda:
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;
}
}
Sumber: https://github.com/gradle/gradle/blob/master/subprojects/base-services/src/main/java/org/gradle/internal/os/OperatingSystem.java
Edit:
Anda dapat melakukan hal yang sama untuk arsitektur:
project.ext.osArch = OperatingSystem.current().getArch();
if ("x86".equals(project.ext.osArch)) {
project.ext.osArch = "i386";
}
dan:
run {
systemProperty "java.library.path", "lib/$osName/$osArch"
}
Ketahuilah bahwa getArch () akan mengembalikan:
- "ppc" di PowerPC
- "amd64" di 64b
- "i386" ATAU "x86" pada 32b.
getArch () akan mengembalikan "x86" pada Solaris atau "i386" untuk platform lain.
Edit 2:
Atau jika Anda ingin menghindari impor apa pun, Anda dapat melakukannya sendiri:
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()
bagian, karena saya hanya butuh nama.