1
2
3
4
5
6
7
8
9
10
11
12
13
14 package ch.qos.logback.core.util;
15
16 import ch.qos.logback.core.CoreConstants;
17
18 import java.lang.module.ModuleDescriptor;
19 import java.util.Optional;
20
21
22
23
24 public class EnvUtil {
25
26 private EnvUtil() {
27 }
28
29
30
31
32
33
34
35
36
37
38
39 static public String logbackVersion() {
40 return VersionUtil.getVersionOfArtifact(CoreConstants.class);
41 }
42
43 static public int getJDKVersion(String javaVersionStr) {
44 int version = 0;
45
46 for (char ch : javaVersionStr.toCharArray()) {
47 if (Character.isDigit(ch)) {
48 version = (version * 10) + (ch - 48);
49 } else if (version == 1) {
50 version = 0;
51 } else {
52 break;
53 }
54 }
55 return version;
56 }
57
58 static private boolean isJDK_N_OrHigher(int n) {
59 String javaVersionStr = System.getProperty("java.version", "");
60 if (javaVersionStr.isEmpty())
61 return false;
62
63 int version = getJDKVersion(javaVersionStr);
64 return version > 0 && n <= version;
65 }
66
67 static public boolean isJDK5() {
68 return isJDK_N_OrHigher(5);
69 }
70
71 static public boolean isJDK6OrHigher() {
72 return isJDK_N_OrHigher(6);
73 }
74
75 static public boolean isJDK7OrHigher() {
76 return isJDK_N_OrHigher(7);
77 }
78
79 static public boolean isJDK16OrHigher() {
80 return isJDK_N_OrHigher(16);
81 }
82
83 static public boolean isJDK18OrHigher() {
84 return isJDK_N_OrHigher(18);
85 }
86
87
88
89
90
91 static public boolean isJDK21OrHigher() {
92 return isJDK_N_OrHigher(21);
93 }
94
95 static public boolean isJaninoAvailable() {
96 ClassLoader classLoader = EnvUtil.class.getClassLoader();
97 try {
98 Class<?> bindingClass = classLoader.loadClass("org.codehaus.janino.ScriptEvaluator");
99 return (bindingClass != null);
100 } catch (ClassNotFoundException e) {
101 return false;
102 }
103 }
104
105 public static boolean isMacOs() {
106 String os = System.getProperty("os.name");
107
108 return os.toLowerCase().contains("mac");
109 }
110
111 public static boolean isWindows() {
112 String os = System.getProperty("os.name");
113 return os.startsWith("Windows");
114 }
115
116 static public boolean isClassAvailable(Class callerClass, String className) {
117 ClassLoader classLoader = Loader.getClassLoaderOfClass(callerClass);
118 try {
119 Class<?> bindingClass = classLoader.loadClass(className);
120 return (bindingClass != null);
121 } catch (ClassNotFoundException e) {
122 return false;
123 }
124 }
125
126 }