--- a/JavaRelease.st Thu Feb 06 10:48:39 2014 +0100
+++ b/JavaRelease.st Thu Feb 06 11:10:48 2014 +0100
@@ -41,6 +41,13 @@
privateIn:JavaRelease
!
+JavaRelease::OpenJDK6 subclass:#AppleJDK6
+ instanceVariableNames:''
+ classVariableNames:''
+ poolDictionaries:'JavaVMData'
+ privateIn:JavaRelease
+!
+
JavaRelease::OpenJDK6 subclass:#OpenJDK7
instanceVariableNames:''
classVariableNames:''
@@ -137,18 +144,26 @@
JDK6
"Meta-release - return either OpenJDK or OracleJDK"
- ^self openJDK6 isAvailable
- ifTrue:[self openJDK6]
- ifFalse:[self oracleJDK6].
+
+ self openJDK6 isAvailable ifTrue:[^ self openJDK6].
+ self oracleJDK6 isAvailable ifTrue:[^ self oracleJDK6].
+ self allSubclassesDo:[:rel |
+ (rel isJDK6 and:[ rel isAvailable ]) ifTrue:[^ rel instance ].
+ ].
+ self error:'no JDK6 found'
"Created: / 16-02-2013 / 09:21:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
JDK7
"Meta-release - return either OpenJDK or OracleJDK"
- ^self openJDK7 isAvailable
- ifTrue:[self openJDK7]
- ifFalse:[self oracleJDK7].
+
+ self openJDK7 isAvailable ifTrue:[^ self openJDK7].
+ self oracleJDK7 isAvailable ifTrue:[^ self oracleJDK7].
+ self allSubclassesDo:[:rel |
+ (rel isJDK7 and:[ rel isAvailable ]) ifTrue:[^ rel instance ].
+ ].
+ self error:'no JDK7 found'
"
JavaRelease JDK6
@@ -159,6 +174,12 @@
"Created: / 16-02-2013 / 09:21:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
+appleJDK6
+ ^ AppleJDK6 instance
+
+ "Created: / 06-02-2014 / 11:01:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
openJDK6
^ OpenJDK6 instance
@@ -185,8 +206,11 @@
"Created: / 12-02-2013 / 03:03:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
-oracleJRE7
- ^ OracleJRE7 instance
+osxJDK6
+ <resource: #obsolete>
+ ^ self appleJDK6
+
+ "Modified: / 06-02-2014 / 11:01:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
sunJDK122
@@ -243,10 +267,10 @@
(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).
- ].
+"/ "/ ('/System/Library/Java' asFilename) exists.
+"/ releases do:[:each |
+"/ each javaHome:('/System/Library/Java/Home' asFilename).
+"/ ].
].
].
releases isEmpty ifTrue: [
@@ -371,6 +395,14 @@
^self class == JavaRelease
"Created: / 22-11-2010 / 13:33:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+isJDK6
+ ^ false
+!
+
+isJDK7
+ ^ false
! !
!JavaRelease methodsFor:'accessing'!
@@ -381,16 +413,26 @@
bootClassPath isNil ifTrue:[
| jreHome libs |
- jreHome := self jreHome.
- libs := jreHome / 'lib'.
- bootClassPath := OrderedCollection new.
- libs directoryContentsAsFilenames do:[:each|
- (each pathName endsWith:'.jar') ifTrue:[
- (each pathName endsWith: 'rt.jar') ifTrue:[
- bootClassPath addFirst: each pathName
- ] ifFalse:[
- bootClassPath addLast: each pathName
- ]
+ jreHome := self jreHome.
+ jreHome notNil ifTrue:[
+ libs := jreHome / (self libDirInJreHome).
+ bootClassPath := OrderedCollection new.
+ libs exists ifFalse:[
+ self error:'no lib found in jre home directory'
+ ] ifTrue:[
+ libs directoryContentsAsFilenames do:[:each|
+ |pathName baseName|
+
+ baseName := each baseName.
+ (baseName endsWith:'.jar') ifTrue:[
+ pathName := each pathName.
+ (baseName endsWith: (self nameOf_rt_dot_jar)) ifTrue:[
+ bootClassPath addFirst: pathName
+ ] ifFalse:[
+ bootClassPath addLast: pathName
+ ]
+ ].
+ ].
].
].
].
@@ -398,6 +440,7 @@
"
Java release bootClassPath
+ Java release jreHome
"
"Created: / 02-11-2011 / 12:19:43 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
@@ -520,8 +563,10 @@
"Answer a set of possible java homes, those directories are searched"
-
- OperatingSystem isUNIXlike ifTrue:[ ^ self javaHomesOnUNIX ].
+ OperatingSystem isUNIXlike ifTrue:[
+ OperatingSystem isOSXlike ifTrue:[ ^ self javaHomesOnOSX ].
+ ^ self javaHomesOnUNIX
+ ].
OperatingSystem isMSWINDOWSlike ifTrue:[ ^ self javaHomesOnWindows ].
self error:'Unsupported platform'.
^ #()
@@ -529,6 +574,11 @@
"Modified: / 22-11-2010 / 13:28:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
+javaHomesOnOSX
+ "/ to be redefined in OSX release classes
+ ^ #()
+!
+
javaHomesOnUNIX
"raise an error: must be redefined in concrete subclass(es)"
@@ -574,10 +624,6 @@
| jreHome |
- OperatingSystem isOSXlike ifTrue:[
- ^ '/System/Library/Java/Home' asFilename
- ].
-
self javaHome isNil ifTrue:[ ^ nil ].
^(jreHome := self javaHome asFilename / 'jre') exists
@@ -587,6 +633,14 @@
"Created: / 27-10-2010 / 21:24:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
+libDirInJreHome
+ "Returns the relative path to the lib directory, relative to the jreHome.
+ For all 'normal' systems, this is 'lib';
+ but under max-osx, this is 'Classes' - sigh"
+
+ ^ 'lib'
+!
+
name
"Answer a human readable name of the Java release such as Sun JDK 1.2.2 or OpenJDK 6"
@@ -596,6 +650,14 @@
"Created: / 27-10-2010 / 18:53:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
+nameOf_rt_dot_jar
+ "Returns the name of the class library.
+ For all 'normal' systems, this is 'rt.jar';
+ but under max-osx, this is 'classes.jar' - sigh"
+
+ ^ 'rt.jar'
+!
+
priority
^50
@@ -979,6 +1041,12 @@
^ 'Id:: '
! !
+!JavaRelease::OpenJDK6 class methodsFor:'queries'!
+
+isJDK6
+ ^ true
+! !
+
!JavaRelease::OpenJDK6 methodsFor:'accessing'!
javaExtDirsOnUNIX
@@ -1149,6 +1217,9 @@
"
JavaRelease openJDK7 searchForSourcePath; sourcePath
JavaRelease sunJDK6 searchForSourcePath; sourcePath
+ JavaRelease openJDK6 searchForSourcePath; sourcePath
+ JavaRelease openJDK6 jdkHome
+ JavaRelease openJDK6 jreHome
"
"Created: / 03-09-2012 / 18:38:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
@@ -1183,6 +1254,154 @@
^ aVersionString matches: 'java version "1.6.*'
! !
+!JavaRelease::AppleJDK6 class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 2014 by Claus Gittinger
+"
+!
+
+documentation
+"
+ JDK6 as installed on a mac, running osx
+"
+! !
+
+!JavaRelease::AppleJDK6 class methodsFor:'queries'!
+
+isJDK6
+ ^ true
+! !
+
+!JavaRelease::AppleJDK6 methodsFor:'accessing'!
+
+javaExtDirsOnUNIX
+
+ ^{
+ self jreHome asFilename / 'Extensions' .
+ }
+!
+
+javaExtDirsOnWindows
+ "/ never exists on windows
+ ^ #()
+!
+
+javaHomesOnOSX
+ ^ {
+ '/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents' .
+ '/System/Library/Java'
+ }
+
+ "
+ JavaRelease::OsxJDK6 new javaHomesOnUNIX
+ "
+!
+
+javaHomesOnWindows
+ "/ never exists on windows
+ ^ #()
+!
+
+javaNativeMethodsImplementation
+ "Returns an object that imolements native methods."
+
+ ^ JavaNativeMethodImpl_OpenJDK6
+
+ "Modified: / 16-01-2013 / 19:59:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+jreHome
+ "Answers the directory where the JRE lives"
+
+ OperatingSystem isOSXlike ifTrue:[
+ ^ '/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents' asFilename.
+ ].
+ ^ super jreHome
+!
+
+libDirInJreHome
+ "Returns the relative path to the lib directory, relative to the jreHome.
+ For all 'normal' systems, this is 'lib';
+ but under max-osx, this is 'Classes' - sigh"
+
+ ^ 'Classes'
+!
+
+name
+ "superclass JavaRelease says that I am responsible to implement this method"
+
+ ^ 'OSX JDK 6'
+
+ "Modified: / 27-10-2010 / 19:16:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+nameOf_rt_dot_jar
+ "Returns the name of the class library.
+ For all 'normal' systems, this is 'rt.jar';
+ but under max-osx, this is 'classes.jar' - sigh"
+
+ ^ 'classes.jar'
+!
+
+priority
+
+ ^80
+ "/^70
+
+ "Created: / 22-11-2010 / 13:35:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 04-02-2011 / 06:59:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+selector
+ "Returns instance-creation selector to get the receiver.
+ See JavaRelease class, protocol instance creation"
+
+ ^#osxJDK6
+! !
+
+!JavaRelease::AppleJDK6 methodsFor:'searching'!
+
+searchForSourcePath
+
+ | jdkHome src_zip |
+
+ super searchForSourcePath.
+
+ sourcePath := OrderedCollection new.
+ jdkHome := self jdkHome.
+ jdkHome notNil ifTrue:[
+ src_zip := jdkHome asFilename / 'src.zip'.
+ src_zip exists ifTrue:[sourcePath add: src_zip pathName].
+ ].
+
+ "
+ JavaRelease openJDK7 searchForSourcePath; sourcePath
+ JavaRelease sunJDK6 searchForSourcePath; sourcePath
+ JavaRelease openJDK6 searchForSourcePath; sourcePath
+ JavaRelease openJDK6 jdkHome
+ JavaRelease openJDK6 jreHome
+ "
+
+ "Created: / 03-09-2012 / 18:38:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 23-01-2013 / 12:22:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified (comment): / 06-02-2013 / 12:55:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!JavaRelease::AppleJDK6 methodsFor:'validating'!
+
+validateJavaHome2: home
+ ^ true
+!
+
+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'!
copyright
@@ -1213,6 +1432,12 @@
^ 'Id:: '
! !
+!JavaRelease::OpenJDK7 class methodsFor:'queries'!
+
+isJDK7
+ ^ true
+! !
+
!JavaRelease::OpenJDK7 methodsFor:'accessing'!
javaHomesOnUNIX