source: main/trunk/gli/CheckJavaVersion.java@ 30066

Last change on this file since 30066 was 15964, checked in by ak19, 16 years ago

Removed use of Patter.quote() which requires Java 1.5 or higher and also checked for the case so that the first occurrence of a higher digit in the running version vs the minimum Java version required will stop the check.

  • Property svn:keywords set to Author Date Id Revision
File size: 3.8 KB
Line 
1import java.util.regex.Pattern;
2
3
4public class CheckJavaVersion {
5 static final String MINIMUM_VERSION_PREFIX = "1.4";
6
7 /**
8 * @param args, arg[0] is the minium version of Java required
9 * to run the program. arg[1] is the name of the program.
10 * If arg[1] is left out, then no distinct program name is
11 * mentioned. If arg[0] is left out as well, then Greenstone3's
12 * minimum default version of 1.4.x is assumed.
13 * The program exits with 1 if the Java version being used is
14 * incompatible and with 2 if it is acceptable.
15 */
16 public static void main(String[] args) {
17 String minimumVersion = MINIMUM_VERSION_PREFIX;
18 String programName = "this program";
19 // the version of java that's in use
20 String runningJavaVersion = System.getProperty("java.version");
21
22 if(args.length > 0) {
23 minimumVersion = args[0];
24 }
25 if(args.length > 1) {
26 programName = args[1];
27 }
28
29 System.out.println("\nChecking for a compatible Java version..."
30 + "\nLooking for minimum version: " + minimumVersion);
31
32 // Version numbers can be of the form "1.5.0_2"
33 // We want to split version numbers into the individual numbers
34 // For example: splitting 1.5.0_2 will give us {1,5,0,2},
35 // while splitting 1.5.0_10 will give us {1,5,0,10}.
36 // The comparison then is straightforward.
37
38 // We will split version strings into the individual numbers
39 // using regular expressions. However, the tokens . and _ are
40 // reserved in regular expressions and need to be escaped:
41 // Period: \Q.\E; underscore: \Q_\E.
42 // Once escaped, it should be indicated in the regular expression
43 // that the two characters are separate tokens by using |, so
44 // that the regex becomes: ".|_" -> \Q.\E|\Q_\E.
45 String period = "\\Q.\\E";
46 String underscore = "\\Q_\\E";
47 // Can't use Pattern.quote() since it is not there in Java 1.4.*
48 //String period = Pattern.quote(".");
49 //String underscore = Pattern.quote("_");
50
51 String[] minVersionNums = minimumVersion.split(period+"|"+underscore);
52 String[] runningVersionNums =runningJavaVersion.split(period+"|"+underscore);
53
54 boolean acceptable = true;
55 // only keep looping while we haven't gone past the end of either array
56 int i=0;
57 for(; i < minVersionNums.length && i < runningVersionNums.length; i++)
58 {
59 int min = Integer.parseInt(minVersionNums[i]);
60 int run = Integer.parseInt(runningVersionNums[i]);
61 if(run > min) {
62 // certain success: one of the higher positional numbers
63 // of the running version is greater than the corresponding
64 // number of the minimum version, meaning we've finished.
65 break;
66 } else if(run < min) {
67 // fail: running version number is lower than corresponding
68 // minimum version number
69 acceptable = false;
70 break;
71 }
72 }
73
74 // Consider minVersion = 1.5.0_10 and runningVersion = 1.5.0
75 // this means the runningversion is still insufficient.
76 // HOWEVER, minVersion being longer does not always mean it is
77 // a later version, consider: min=1.5.0_9.12 and run=1.5.0_10
78 // This should be acceptable since 10 > 9 even though min is longer.
79 // SOLUTION: If the last values for both were the same, the running
80 // Version is not compatible if the minVersionNums array is longer
81 int min = Integer.parseInt(minVersionNums[i-1]);
82 int run = Integer.parseInt(runningVersionNums[i-1]);
83
84 // if the last values were the same, check whether min is longer
85 // in which case the running version is not acceptable
86 if(min == run && minVersionNums.length > runningVersionNums.length)
87 {
88 acceptable = false;
89 }
90
91 if(acceptable) {
92 System.out.println("Found compatible Java version " +runningJavaVersion);
93 System.exit(2); // acceptable case
94 } else {
95 System.out.println("The current Java version " +
96 runningJavaVersion + " is insufficient to run " + programName);
97 System.exit(1);
98 }
99 }
100}
Note: See TracBrowser for help on using the repository browser.