diff --git a/var/spack/repos/builtin/packages/jdk/package.py b/var/spack/repos/builtin/packages/jdk/package.py
index a90ddff904919ff77cefb4ec489d7ab841ca96fe..31510d739e7efebafc9d348e7aab0699ec4de5db 100644
--- a/var/spack/repos/builtin/packages/jdk/package.py
+++ b/var/spack/repos/builtin/packages/jdk/package.py
@@ -3,11 +3,11 @@
 #
 # SPDX-License-Identifier: (Apache-2.0 OR MIT)
 
-from spack.util.prefix import Prefix
-from spack import *
+import os
+import re
 
 import llnl.util.tty as tty
-import os
+from spack.util.prefix import Prefix
 
 
 class Jdk(Package):
@@ -79,6 +79,19 @@ class Jdk(Package):
     #    can symlink all *.jar files to `prefix.lib.ext`
     extendable = True
 
+    executables = ['^java$']
+
+    @classmethod
+    def determine_version(cls, exe):
+        output = Executable(exe)('-version', output=str, error=str)
+
+        # Make sure this is actually Oracle JDK, not OpenJDK
+        if 'openjdk' in output:
+            return None
+
+        match = re.search(r'\(build (\S+)\)', output)
+        return match.group(1).replace('+', '_') if match else None
+
     @property
     def home(self):
         """Most of the time, ``JAVA_HOME`` is simply ``spec['java'].prefix``.
diff --git a/var/spack/repos/builtin/packages/openjdk/package.py b/var/spack/repos/builtin/packages/openjdk/package.py
index 9b520ded996a8823981bbe4f1c4bf149f85bc763..4c50bdfc2c5004acbc175d6854ee39d3f179ac2d 100644
--- a/var/spack/repos/builtin/packages/openjdk/package.py
+++ b/var/spack/repos/builtin/packages/openjdk/package.py
@@ -3,9 +3,9 @@
 #
 # SPDX-License-Identifier: (Apache-2.0 OR MIT)
 
-from spack import *
 import os
 import platform
+import re
 
 
 # If you need to add a new version, please be aware that:
@@ -60,6 +60,19 @@ class Openjdk(Package):
     #    can symlink all *.jar files to `prefix.lib.ext`
     extendable = True
 
+    executables = ['^java$']
+
+    @classmethod
+    def determine_version(cls, exe):
+        output = Executable(exe)('-version', output=str, error=str)
+
+        # Make sure this is actually OpenJDK, not Oracle JDK
+        if 'openjdk' not in output:
+            return None
+
+        match = re.search(r'\(build (\S+)\)', output)
+        return match.group(1).replace('+', '_') if match else None
+
     @property
     def home(self):
         """Most of the time, ``JAVA_HOME`` is simply ``spec['java'].prefix``.