SOLR-17205 De-couple SolrJ Java version from server Java version (#2360)

diff --git a/build.gradle b/build.gradle
index 8569c86..9da30ad 100644
--- a/build.gradle
+++ b/build.gradle
@@ -30,6 +30,10 @@
   id 'com.github.node-gradle.node' version '7.0.1' apply false
 }
 
+// Declare default Java versions for the entire project and for SolrJ separately
+rootProject.ext.minJavaVersionDefault = JavaVersion.VERSION_11
+rootProject.ext.minJavaVersionSolrJ = JavaVersion.VERSION_11
+
 apply from: file('gradle/globals.gradle')
 
 // General metadata.
@@ -85,8 +89,6 @@
   buildTime = DateTimeFormatter.ofPattern("HH:mm:ss").format(tstamp)
   buildYear = DateTimeFormatter.ofPattern("yyyy").format(tstamp)
 
-  minJavaVersion = JavaVersion.VERSION_11
-
   // Allow definiting external tool locations using system props.
   externalTool = { name ->
     def resolved = propertyOrDefault("${name}.exe", name as String)
diff --git a/gradle/globals.gradle b/gradle/globals.gradle
index 48131b3..30eaa08 100644
--- a/gradle/globals.gradle
+++ b/gradle/globals.gradle
@@ -169,5 +169,9 @@
     // "CI": Github (https://docs.github.com/en/actions/learn-github-actions/environment-variables)
     // anything starting with "JENKINS_" or "HUDSON_": Jenkins/Hudson (https://jenkins.thetaphi.de/env-vars.html/)
     isCIBuild = System.getenv().keySet().any { it ==~ /(?i)((JENKINS|HUDSON)(_\w+)?|CI)/ }
+
+    // Assign different java version for client-side modules 'api' and 'solrj*'
+    var isSolrJ = project.name.matches("^(solrj.*|api)\$")
+    minJavaVersion = isSolrJ ? rootProject.minJavaVersionSolrJ : rootProject.minJavaVersionDefault
   }
 }
diff --git a/gradle/ide/eclipse.gradle b/gradle/ide/eclipse.gradle
index 1c1b626..a088c8b 100644
--- a/gradle/ide/eclipse.gradle
+++ b/gradle/ide/eclipse.gradle
@@ -69,9 +69,9 @@
     }
 
     jdt {
-      sourceCompatibility = rootProject.minJavaVersion
-      targetCompatibility = rootProject.minJavaVersion
-      javaRuntimeName = "JavaSE-${rootProject.minJavaVersion}"
+      sourceCompatibility = rootProject.minJavaVersionDefault
+      targetCompatibility = rootProject.minJavaVersionDefault
+      javaRuntimeName = "JavaSE-${rootProject.minJavaVersionDefault}"
     }
   }
 
diff --git a/gradle/java/javac.gradle b/gradle/java/javac.gradle
index 9812ed5..53320cc 100644
--- a/gradle/java/javac.gradle
+++ b/gradle/java/javac.gradle
@@ -19,12 +19,12 @@
 
 allprojects {
   plugins.withType(JavaPlugin) {
-    sourceCompatibility = rootProject.minJavaVersion
-    targetCompatibility = rootProject.minJavaVersion
+    sourceCompatibility = project.minJavaVersion
+    targetCompatibility = project.minJavaVersion
 
     // Use 'release' flag instead of 'source' and 'target'
     tasks.withType(JavaCompile) {
-      options.compilerArgs += ["--release", rootProject.minJavaVersion.toString()]
+      options.compilerArgs += ["--release", project.minJavaVersion.toString()]
     }
 
     // Configure warnings.
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index ce9cd2c..107f7a9 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -86,6 +86,8 @@
 
 * SOLR-14410: Switch from SysV init script to systemd service definition (Marius Ghita via janhoy)
 
+* SOLR-17205: De-couple SolrJ required Java version from server Java version (janhoy)
+
 ==================  9.6.0 ==================
 New Features
 ---------------------