This is an automated email from the ASF dual-hosted git repository.
hossman pushed a commit to branch branch_9x
in repository https://gitbox.apache.org/repos/asf/solr.git
The following commit(s) were added to refs/heads/branch_9x by this push:
new fb4d7d2ec9f SOLR-16258: Gradle no longer uses errorprone by default
fb4d7d2ec9f is described below
commit fb4d7d2ec9fed455e7ce2044324c42cfe88436f8
Author: Chris Hostetter <[email protected]>
AuthorDate: Mon Jun 27 08:44:08 2022 -0700
SOLR-16258: Gradle no longer uses errorprone by default
(cherry picked from commit f97954556d144bd0bc8789dbb79ffb513ce80e61)
---
gradle/generation/local-settings.gradle | 26 +++++++++++++++++++++++++-
gradle/globals.gradle | 5 +++++
gradle/validation/error-prone.gradle | 19 +++++++++++++++----
gradle/validation/spotless.gradle | 2 ++
help/localSettings.txt | 7 ++++++-
solr/CHANGES.txt | 2 ++
6 files changed, 55 insertions(+), 6 deletions(-)
diff --git a/gradle/generation/local-settings.gradle
b/gradle/generation/local-settings.gradle
index 1fd1f72291e..408f25e15a2 100644
--- a/gradle/generation/local-settings.gradle
+++ b/gradle/generation/local-settings.gradle
@@ -22,6 +22,30 @@
def hasDefaults = rootProject.file("gradle.properties").exists()
configure(rootProject) {
+ // Add a task verifying that gradle process has access to JVM internals.
+ // this is occasionally needed for certain tasks.
+ task checkJdkInternalsExportedToGradle() {
+ doFirst {
+ def jdkCompilerModule =
ModuleLayer.boot().findModule("jdk.compiler").orElseThrow()
+ def gradleModule = getClass().module
+ def internalsExported = [
+ "com.sun.tools.javac.api",
+ "com.sun.tools.javac.file",
+ "com.sun.tools.javac.parser",
+ "com.sun.tools.javac.tree",
+ "com.sun.tools.javac.util"
+ ].stream()
+ .allMatch(pkg -> jdkCompilerModule.isExported(pkg, gradleModule))
+
+ if (!internalsExported) {
+ throw new GradleException(
+ "Certain gradle tasks and plugins require access to jdk.compiler" +
+ " internals, your gradle.properties might have just been
generated or could be" +
+ " out of sync (see help/localSettings.txt)")
+ }
+ }
+ }
+
task localSettings() {
doFirst {
// If we don't have the defaults yet, create them.
@@ -43,7 +67,7 @@ systemProp.file.encoding=UTF-8
# Set up gradle JVM defaults.
# The heap seems huge but gradle runs out of memory on lower values (don't
know why).
#
-# We also open up internal compiler modules for spotless/ google jaa format.
+# We also open up internal compiler modules for spotless/ google java format.
org.gradle.jvmargs=-Xmx3g \\
--add-exports jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED \\
--add-exports jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED \\
diff --git a/gradle/globals.gradle b/gradle/globals.gradle
index a854304d475..912e6074b44 100644
--- a/gradle/globals.gradle
+++ b/gradle/globals.gradle
@@ -151,5 +151,10 @@ allprojects {
}
return taskList
}
+
+ // detect if we run in CI environment by looking at existence of env vars:
+ // "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().find { it ==~
/(?i)((JENKINS|HUDSON)(_\w+)?|CI)/ } != null
}
}
diff --git a/gradle/validation/error-prone.gradle
b/gradle/validation/error-prone.gradle
index b66da215ace..12f655f219e 100644
--- a/gradle/validation/error-prone.gradle
+++ b/gradle/validation/error-prone.gradle
@@ -15,12 +15,21 @@
* limitations under the License.
*/
-def skipErrorProne = rootProject.usesAltJvm && rootProject.runtimeJavaVersion
> JavaVersion.VERSION_15;
-if (skipErrorProne) {
+def skipReason
+
+if (rootProject.usesAltJvm && rootProject.runtimeJavaVersion >
JavaVersion.VERSION_15) {
+ skipReason = "won't work with JDK ${rootProject.runtimeJavaVersion} if used
as alternative java toolchain"
+}
+
+if (!propertyOrDefault("validation.errorprone", isCIBuild).asBoolean()) {
+ skipReason = "skipped on builds not running inside CI environments, pass
-Pvalidation.errorprone=true to enable"
+}
+
+if (skipReason) {
configure(rootProject) {
task errorProneSkipped() {
doFirst {
- logger.warn("WARNING: errorprone disabled (won't work with JDK
${rootProject.runtimeJavaVersion} if used as alternative java toolchain)")
+ logger.warn("WARNING: errorprone disabled (${skipReason})")
}
}
}
@@ -33,7 +42,7 @@ allprojects { prj ->
// additional module system opens in place.
// This is a hack to keep the dependency (so that palantir's version check
doesn't complain)
// but don't include the plugin (which fails on JDK16+).
- if (skipErrorProne) {
+ if (skipReason) {
tasks.withType(JavaCompile) { task -> task.dependsOn
":errorProneSkipped" }
configurations {
errorprone
@@ -49,6 +58,8 @@ allprojects { prj ->
}
tasks.withType(JavaCompile) { task ->
+ task.dependsOn ":checkJdkInternalsExportedToGradle"
+
options.errorprone.disableWarningsInGeneratedCode = true
options.errorprone.errorproneArgs = [
'-Xep:InlineMeSuggester:OFF', // We don't use this annotation
diff --git a/gradle/validation/spotless.gradle
b/gradle/validation/spotless.gradle
index 4047fc5c454..b028fe00168 100644
--- a/gradle/validation/spotless.gradle
+++ b/gradle/validation/spotless.gradle
@@ -79,9 +79,11 @@ configure(project(":solr").subprojects) { prj ->
tasks.matching { task -> task.name == "spotlessApply" }.configureEach { v ->
tidy.dependsOn v
+ v.dependsOn ":checkJdkInternalsExportedToGradle"
}
tasks.matching { task -> task.name == "spotlessCheck" }.configureEach { v ->
check.dependsOn v
+ v.dependsOn ":checkJdkInternalsExportedToGradle"
}
}
diff --git a/help/localSettings.txt b/help/localSettings.txt
index 13364974b06..4af8411d1c3 100644
--- a/help/localSettings.txt
+++ b/help/localSettings.txt
@@ -4,7 +4,12 @@ Local developer settings
The first invocation of any task in Solr gradle build will generate
and save a project-local 'gradle.properties' file. This file contains
the defaults you may (but don't have to) tweak for your particular hardware
-(or taste).
+(or taste). Note there are certain settings in that file that may
+be _required_ at runtime for certain plugins (an example is the spotless/
+google java format plugin, which requires adding custom exports to JVM
modules). Gradle
+build only generates this file if it's not already present (it never overwrites
+the defaults) -- occasionally you may have to manually delete (or move) this
+file and regenerate from scratch.
This is an overview of some of these settings.
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 628930c6f90..0fc3362b380 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -99,6 +99,8 @@ Build
* Upgrade forbiddenapis to 3.3 (Uwe Schindler)
+* SOLR-16258: Gradle no longer uses "errorprone" by default (Dawid Weiss, Uwe
Schindler, hossman)
+
================== 9.0.0 ==================
New Features