View Javadoc
1   /**
2    * Logback: the reliable, generic, fast and flexible logging framework.
3    * Copyright (C) 1999-2015, QOS.ch. All rights reserved.
4    *
5    * This program and the accompanying materials are dual-licensed under
6    * either the terms of the Eclipse Public License v1.0 as published by
7    * the Eclipse Foundation
8    *
9    *   or (per the licensee's choosing)
10   *
11   * under the terms of the GNU Lesser General Public License version 2.1
12   * as published by the Free Software Foundation.
13   */
14  package ch.qos.logback.core.util;
15  
16  /**
17   * @author Ceki Gülcü
18   */
19  public class EnvUtil {
20  
21      private EnvUtil() {
22      }
23  
24      /**
25       * <p>Returns the current version of logback, or null if data is not
26       * available.
27       * </p>
28       *
29       * @since 1.3.0
30       * @return current version or null if missing version data
31       */
32      static public String logbackVersion() {
33          Package pkg = EnvUtil.class.getPackage();
34          if(pkg == null) {
35              return null;
36          }
37          return pkg.getImplementationVersion();
38      }
39  
40      static public int getJDKVersion(String javaVersionStr) {
41          int version = 0;
42  
43          for (char ch : javaVersionStr.toCharArray()) {
44              if (Character.isDigit(ch)) {
45                  version = (version * 10) + (ch - 48);
46              } else if (version == 1) {
47                  version = 0;
48              } else {
49                  break;
50              }
51          }
52          return version;
53      }
54  
55      static private boolean isJDK_N_OrHigher(int n) {
56          String javaVersionStr = System.getProperty("java.version", "");
57          if (javaVersionStr.isEmpty())
58              return false;
59  
60          int version = getJDKVersion(javaVersionStr);
61          return version > 0 && n <= version;
62      }
63  
64      static public boolean isJDK5() {
65          return isJDK_N_OrHigher(5);
66      }
67  
68      static public boolean isJDK6OrHigher() {
69          return isJDK_N_OrHigher(6);
70      }
71  
72      static public boolean isJDK7OrHigher() {
73          return isJDK_N_OrHigher(7);
74      }
75  
76      static public boolean isJDK16OrHigher() {
77          return isJDK_N_OrHigher(16);
78      }
79  
80      static public boolean isJDK18OrHigher() {
81          return isJDK_N_OrHigher(18);
82      }
83  
84      static public boolean isJaninoAvailable() {
85          ClassLoader classLoader = EnvUtil.class.getClassLoader();
86          try {
87              Class<?> bindingClass = classLoader.loadClass("org.codehaus.janino.ScriptEvaluator");
88              return (bindingClass != null);
89          } catch (ClassNotFoundException e) {
90              return false;
91          }
92      }
93  
94      public static boolean isWindows() {
95          String os = System.getProperty("os.name");
96          return os.startsWith("Windows");
97      }
98  
99      static public boolean isClassAvailable(Class callerClass, String className) {
100         ClassLoader classLoader = Loader.getClassLoaderOfClass(callerClass);
101         try {
102             Class<?> bindingClass = classLoader.loadClass(className);
103             return (bindingClass != null);
104         } catch (ClassNotFoundException e) {
105             return false;
106         }
107     }
108 
109 }