JavaRelease.st
changeset 2462 2b3a015bc970
parent 2459 2f9323002c41
child 2566 f1cea8b752ba
child 2678 c865275e48a7
--- a/JavaRelease.st	Mon Mar 18 17:59:29 2013 +0100
+++ b/JavaRelease.st	Mon Mar 18 18:08:04 2013 +0100
@@ -232,10 +232,27 @@
 !
 
 available
-    | releases |
+    | releases out path |
+
     releases := self all select: [:rel | rel isAvailable ].
-    releases isEmpty
-        ifTrue: [ self error: 'No Java release found'. ^nil ].
+    releases isEmpty ifTrue: [
+        "/ none of the releases seems to be installed in a way that it is found
+        "/ out of the box. Try a 'java' command...
+        (path := OperatingSystem pathOfCommand:'java') notNil ifTrue:[
+            out := WriteStream on:(String new:100).
+            (OperatingSystem executeCommand:'java -version' outputTo:out) ifTrue:[
+                out := out contents.
+                releases := self all select:[:rel | rel validateJavaVersionString:out].
+                ('/System/Library/Java' asFilename) exists  
+                releases do:[:each |
+                    each javaHome:('/System/Library/Java/Home' asFilename).
+                ].
+            ].
+        ].
+        releases isEmpty ifTrue: [ 
+            self error: 'No Java release found'. ^nil 
+        ].
+    ].
     ^releases
 
     "
@@ -277,11 +294,11 @@
 bootClassPath
     "Returns a default value of sun.boot.class.path"
 
+    bootClassPath isNil ifTrue:[
+        | jreHome libs |
 
-    bootClassPath isNil ifTrue:[
-        | libs |
-
-        libs := self jreHome / 'lib'.
+        jreHome := self jreHome.
+        libs := jreHome / 'lib'.
         bootClassPath := OrderedCollection new.
         libs directoryContentsAsFilenames do:[:each|
             (each pathName endsWith:'.jar') ifTrue:[
@@ -304,6 +321,16 @@
     "Modified: / 23-01-2013 / 15:18:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
+bootClassPath:aCollectionOfPathes
+    "Change the bootClassPath"                         
+
+    bootClassPath := OrderedCollection withAll:aCollectionOfPathes.
+
+    "
+    Java release bootClassPath
+    "
+!
+
 javaBundle
     "Returns bundle representing Java code (both core + extections)"
 
@@ -462,6 +489,10 @@
 
     | jreHome |
 
+    OperatingSystem isOSXlike ifTrue:[
+        ^ '/System/Library/Java/Home' asFilename
+    ].
+
     self javaHome isNil ifTrue:[ ^ nil ].
 
     ^(jreHome := self javaHome asFilename / 'jre') exists
@@ -800,8 +831,9 @@
         (self validateJavaHome: h) ifTrue:[ javaHome := h. ^ javaHome ].
     ].
 
-    self javaHomes do:
-        [:home| | homeAsFilename |
+    self javaHomes do: [:home| 
+        | homeAsFilename |
+
         homeAsFilename := home asFilename.
         homeAsFilename exists ifTrue:
             [(self validateJavaHome: homeAsFilename) ifTrue:
@@ -882,6 +914,13 @@
 
     "Created: / 27-10-2010 / 19:14:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
     "Modified: / 12-02-2013 / 02:51:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+validateJavaVersionString:aVersionString
+    "Return true if aVersionString (which is what 'java -version' returns)
+     matches what I expect."
+
+    ^ false
 ! !
 
 !JavaRelease::OpenJDK6 class methodsFor:'documentation'!
@@ -1098,6 +1137,13 @@
     ^OperatingSystem isUNIXlike
 
     "Created: / 12-02-2013 / 02:52:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+validateJavaVersionString:aVersionString
+    "Return true if aVersionString (which is what 'java -version' returns)
+     matches what I expect."
+
+    ^ aVersionString matches: 'java version "1.6.*'
 ! !
 
 !JavaRelease::OpenJDK7 class methodsFor:'documentation'!
@@ -1227,6 +1273,15 @@
     "Modified: / 08-02-2013 / 00:57:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
+!JavaRelease::OpenJDK7 methodsFor:'validating'!
+
+validateJavaVersionString:aVersionString
+    "Return true if aVersionString (which is what 'java -version' returns)
+     matches what I expect."
+
+    ^ aVersionString matches: 'java version "1.7.*' 
+! !
+
 !JavaRelease::OracleJDK6 class methodsFor:'documentation'!
 
 copyright
@@ -1452,6 +1507,13 @@
 
     "Created: / 12-02-2013 / 02:52:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
     "Modified: / 16-02-2013 / 02:54:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+validateJavaVersionString:aVersionString
+    "Return true if aVersionString (which is what 'java -version' returns)
+     matches what I expect."
+
+    ^ aVersionString matches: 'java version "1.6.*' 
 ! !
 
 !JavaRelease::OracleJDK7 class methodsFor:'documentation'!
@@ -1683,6 +1745,13 @@
 
     "Created: / 12-02-2013 / 02:52:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
     "Modified: / 16-02-2013 / 02:54:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+validateJavaVersionString:aVersionString
+    "Return true if aVersionString (which is what 'java -version' returns)
+     matches what I expect."
+
+    ^ aVersionString matches: 'java version "1.7.*' 
 ! !
 
 !JavaRelease::SunJDK122 class methodsFor:'documentation'!
@@ -1780,14 +1849,23 @@
     "Created: / 27-07-2012 / 00:04:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
+!JavaRelease::SunJDK122 methodsFor:'validating'!
+
+validateJavaVersionString:aVersionString
+    "Return true if aVersionString (which is what 'java -version' returns)
+     matches what I expect."
+
+    ^ aVersionString matches: 'java version "1.2.*'
+! !
+
 !JavaRelease class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libjava/JavaRelease.st,v 1.9 2013-03-15 16:42:25 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libjava/JavaRelease.st,v 1.10 2013-03-18 17:08:04 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libjava/JavaRelease.st,v 1.9 2013-03-15 16:42:25 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libjava/JavaRelease.st,v 1.10 2013-03-18 17:08:04 cg Exp $'
 !
 
 version_SVN