You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by dw...@apache.org on 2020/07/21 07:21:04 UTC

[lucene-solr] branch master updated: LUCENE-9312: Allow builds against arbitrary JVMs (squashed jira/LUCENE-9312)

This is an automated email from the ASF dual-hosted git repository.

dweiss pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git


The following commit(s) were added to refs/heads/master by this push:
     new 8ebf2d0  LUCENE-9312: Allow builds against arbitrary JVMs (squashed jira/LUCENE-9312)
8ebf2d0 is described below

commit 8ebf2d0b2187d849032747d0102ca5eb57b76f05
Author: Dawid Weiss <dw...@apache.org>
AuthorDate: Tue Jul 21 09:19:38 2020 +0200

    LUCENE-9312: Allow builds against arbitrary JVMs (squashed
    jira/LUCENE-9312)
---
 build.gradle                                     |  4 +-
 gradle/{ => documentation}/render-javadoc.gradle | 21 ++++++-
 gradle/help.gradle                               |  1 +
 gradle/testing/alternative-jdk-support.gradle    | 72 ++++++++++++++++++++++++
 gradle/testing/runtime-jvm-support.gradle        | 52 -----------------
 help/jvms.txt                                    | 18 ++++++
 help/tests.txt                                   | 15 -----
 lucene/CHANGES.txt                               |  2 +
 8 files changed, 114 insertions(+), 71 deletions(-)

diff --git a/build.gradle b/build.gradle
index 668c345..a38ca1f 100644
--- a/build.gradle
+++ b/build.gradle
@@ -94,7 +94,7 @@ apply from: file('gradle/defaults-java.gradle')
 apply from: file('gradle/testing/defaults-tests.gradle')
 apply from: file('gradle/testing/randomization.gradle')
 apply from: file('gradle/testing/fail-on-no-tests.gradle')
-apply from: file('gradle/testing/runtime-jvm-support.gradle')
+apply from: file('gradle/testing/alternative-jdk-support.gradle')
 apply from: file('gradle/jar-manifest.gradle')
 
 // Maven publishing.
@@ -149,6 +149,6 @@ apply from: file('gradle/ant-compat/forbidden-api-rules-in-sync.gradle')
 apply from: file('gradle/documentation/documentation.gradle')
 apply from: file('gradle/documentation/changes-to-html.gradle')
 apply from: file('gradle/documentation/markdown.gradle')
-apply from: file('gradle/render-javadoc.gradle')
+apply from: file('gradle/documentation/render-javadoc.gradle')
 
 apply from: file('gradle/hacks/findbugs.gradle')
diff --git a/gradle/render-javadoc.gradle b/gradle/documentation/render-javadoc.gradle
similarity index 95%
rename from gradle/render-javadoc.gradle
rename to gradle/documentation/render-javadoc.gradle
index 7fcee58..27d282b 100644
--- a/gradle/render-javadoc.gradle
+++ b/gradle/documentation/render-javadoc.gradle
@@ -1,3 +1,5 @@
+import javax.annotation.Nullable
+
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -150,6 +152,11 @@ class RenderJavadocTask extends DefaultTask {
 
   @Input
   def solrDocUrl = "${->project.solrDocUrl}"
+
+  @Nullable
+  @Optional
+  @Input
+  def executable
   
   /** Utility method to recursively collect all tasks with same name like this one that we depend on */
   private Set findRenderTasksInDependencies() {
@@ -165,8 +172,6 @@ class RenderJavadocTask extends DefaultTask {
 
   @TaskAction
   public void render() {
-    def javadocCmd = org.gradle.internal.jvm.Jvm.current().getJavadocExecutable()
-
     def srcDirs = srcDirSet.srcDirs.findAll { dir -> dir.exists() }
     def optionsFile = project.file("${getTemporaryDir()}/javadoc-options.txt")
     
@@ -254,6 +259,18 @@ class RenderJavadocTask extends DefaultTask {
       }
     })
 
+    def javadocCmd = {
+      if (executable == null) {
+        JavaInstallationRegistry registry = project.extensions.getByType(JavaInstallationRegistry)
+        JavaInstallation currentJvm = registry.installationForCurrentVirtualMachine.get()
+        return currentJvm.jdk.get().javadocExecutable.asFile
+      } else {
+        return project.file(executable)
+      }
+    }()
+
+    logger.info("Javadoc executable used: ${javadocCmd}")
+
     def outputFile = project.file("${getTemporaryDir()}/javadoc-output.txt")
     def result
     outputFile.withOutputStream { output ->
diff --git a/gradle/help.gradle b/gradle/help.gradle
index d76ce90..edee1c3 100644
--- a/gradle/help.gradle
+++ b/gradle/help.gradle
@@ -22,6 +22,7 @@ configure(rootProject) {
       ["Workflow", "help/workflow.txt", "Typical workflow commands."],
       ["Ant", "help/ant.txt", "Ant-gradle migration help."],
       ["Tests", "help/tests.txt", "Tests, filtering, beasting, etc."],
+      ["Jvms", "help/jvms.txt", "Using alternative or EA JVM toolchains."],
       ["Deps", "help/dependencies.txt", "Declaring, inspecting and excluding dependencies."],
       ["ForbiddenApis", "help/forbiddenApis.txt", "How to add/apply rules for forbidden APIs."],
       ["LocalSettings", "help/localSettings.txt", "Local settings, overrides and build performance tweaks."],
diff --git a/gradle/testing/alternative-jdk-support.gradle b/gradle/testing/alternative-jdk-support.gradle
new file mode 100644
index 0000000..1e69291
--- /dev/null
+++ b/gradle/testing/alternative-jdk-support.gradle
@@ -0,0 +1,72 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// This adds support for compiling and testing against a different Java runtime.
+// This is the only way to build against JVMs not yet supported by Gradle itself.
+
+JavaInstallationRegistry registry = extensions.getByType(JavaInstallationRegistry)
+
+JavaInstallation currentJvm = registry.installationForCurrentVirtualMachine.get()
+
+JavaInstallation altJvm = {
+  def runtimeJavaHome = propertyOrDefault("runtime.java.home", System.getenv('RUNTIME_JAVA_HOME'))
+  if (!runtimeJavaHome) {
+    return currentJvm
+  } else {
+    return registry.installationForDirectory(
+        layout.projectDirectory.dir(runtimeJavaHome)).get()
+  }
+}()
+
+if (!currentJvm.javaExecutable.equals(altJvm.javaExecutable)) {
+  // Set up java toolchain tasks to use the alternative Java.
+  // This is a related Gradle issue for the future:
+  // https://github.com/gradle/gradle/issues/1652
+
+  configure(rootProject) {
+    task altJvmWarning() {
+      doFirst {
+        logger.warn("""NOTE: Alternative java toolchain will be used for compilation and tests:
+  Project will use Java ${altJvm.javaVersion} from: ${altJvm.installationDirectory}
+  Gradle runs with Java ${currentJvm.javaVersion} from: ${currentJvm.installationDirectory}
+""")
+      }
+    }
+  }
+
+  // Set up toolchain-dependent tasks to use the alternative JVM.
+  allprojects {
+    // Any tests
+    tasks.withType(Test) {
+      dependsOn ":altJvmWarning"
+      executable = altJvm.javaExecutable
+    }
+
+    // Any javac compilation tasks
+    tasks.withType(JavaCompile) {
+      dependsOn ":altJvmWarning"
+      options.fork = true
+      options.forkOptions.javaHome = altJvm.installationDirectory.asFile
+    }
+
+    def javadocExecutable = altJvm.jdk.get().javadocExecutable.asFile
+    tasks.matching { it.name == "renderJavadoc" || it.name == "renderSiteJavadoc" }.all {
+      dependsOn ":altJvmWarning"
+      executable = javadocExecutable
+    }
+  }
+}
diff --git a/gradle/testing/runtime-jvm-support.gradle b/gradle/testing/runtime-jvm-support.gradle
deleted file mode 100644
index ce48b56..0000000
--- a/gradle/testing/runtime-jvm-support.gradle
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-// This adds support for compiling and testing against a different Java runtime.
-// This is the only way to build against JVMs not yet supported by Gradle itself.
-
-import org.gradle.internal.jvm.Jvm
-
-def jvmForTests = {
-  def runtimeJavaHome = propertyOrDefault("runtime.java.home", System.getenv('RUNTIME_JAVA_HOME'))
-  if (!runtimeJavaHome) {
-    return Jvm.current()
-  } else {
-    return Jvm.forHome(file(runtimeJavaHome))
-  }
-}()
-def jvmGradle = Jvm.current()
-
-def differentTestJvm = (jvmGradle.javaHome.canonicalPath != jvmForTests.javaHome.canonicalPath)
-
-// Set up tasks to use the alternative Java.
-if (differentTestJvm) {
-  configure(rootProject) {
-    task testJvmWarning() {
-      doFirst {
-        logger.warn("This Java will be used for running tests: ${jvmForTests.javaExecutable}")
-      }
-    }
-  }
-
-  // Set up test tasks to use the alternative JVM.
-  allprojects {
-    tasks.withType(Test) {
-      dependsOn ":testJvmWarning"
-      executable = jvmForTests.javaExecutable
-    }
-  }
-}
\ No newline at end of file
diff --git a/help/jvms.txt b/help/jvms.txt
new file mode 100644
index 0000000..42a88d2
--- /dev/null
+++ b/help/jvms.txt
@@ -0,0 +1,18 @@
+Compiling and testing against different JVMs
+============================================
+
+By default tests are executed with the same Java Gradle is using internally.
+
+To run tests against a different Java version, define a property called
+"runtime.java.home" or define an environment variable "RUNTIME_JAVA_HOME"
+pointing at the JDK installation folder.
+
+If property is being used, it can be a system property (-D...) or a project
+property (-P...).
+
+Example:
+
+gradlew test -p lucene/test-framework --tests TestJvmInfo -Dtests.verbose=true -Druntime.java.home=/jvms/jdk14
+
+Note that an alternative JVM can also be made the "default" setting
+by adding it to (project-local) gradle.properties.
diff --git a/help/tests.txt b/help/tests.txt
index 2caef22..30b1f4a 100644
--- a/help/tests.txt
+++ b/help/tests.txt
@@ -140,18 +140,3 @@ Using these additional options will make the results more sparse, so it may be u
 to increase the top-N count:
 
 gradlew -p lucene/core test -Ptests.profile=true -Ptests.profile.count=100
-
-Testing against different JVMs
-------------------------------
-
-By default tests are executed with the same Java gradle is using internally.
-To run tests against a different Java version define a property called
-"runtime.java.home" or define an environment variable "RUNTIME_JAVA_HOME"
-pointing at the JDK installation folder.
-
-If property is used, it can be a system property (-D...) or a project
-property (-P...).
-
-Example:
-
-gradlew test -p lucene/test-framework --tests TestJvmInfo -Dtests.verbose=true -Druntime.java.home=/jvms/jdk14
diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt
index 119a37d..ea17066 100644
--- a/lucene/CHANGES.txt
+++ b/lucene/CHANGES.txt
@@ -134,6 +134,8 @@ Bug fixes
 
 Other
 
+* LUCENE-9312: Allow gradle builds against arbitrary JVMs. (Tomoko Uchida, Dawid Weiss)
+
 * LUCENE-9391: Upgrade HPPC to 0.8.2. (Haoyu Zhai)
 
 * LUCENE-8768: Fix Javadocs build in Java 11. (Namgyu Kim)