From 334aeb13492be053cc8ac8743f43cf266fea9bb6 Mon Sep 17 00:00:00 2001 From: Sanne Grinovero Date: Fri, 26 Nov 2021 16:24:34 +0000 Subject: [PATCH] HHH-14946 Upgrading base requirements to Java 11 --- README.adoc | 2 +- build.gradle | 6 ++-- .../metamodelgen/MetamodelGenerator.adoc | 3 -- .../src/main/asciidoc/userguide/Preface.adoc | 9 +----- gradle/java-module.gradle | 32 +++++-------------- gradle/javadoc.gradle | 2 +- hibernate-core/hibernate-core.gradle | 12 +++---- hibernate-orm-build/build.gradle | 4 +-- hibernate-proxool/hibernate-proxool.gradle | 16 ++++------ release/release.gradle | 16 ++++------ settings.gradle | 19 +++-------- .../hibernate-gradle-plugin.gradle | 6 ++-- .../src/template/resources/build.gradle.kts | 2 +- 13 files changed, 41 insertions(+), 88 deletions(-) diff --git a/README.adoc b/README.adoc index 18ac39efca..f4f62c12e9 100644 --- a/README.adoc +++ b/README.adoc @@ -18,7 +18,7 @@ for its CI needs. See == Building from sources -The build requires at least Java 8 JDK. +The build requires at least Java 11 JDK. Hibernate uses https://gradle.org[Gradle] as its build tool. See the _Gradle Primer_ section below if you are new to Gradle. diff --git a/build.gradle b/build.gradle index 00d2642745..13d0e2f557 100644 --- a/build.gradle +++ b/build.gradle @@ -69,10 +69,8 @@ task release { def javaVersionsInUse = [gradle.ext.javaVersions.main.compiler, gradle.ext.javaVersions.main.release, gradle.ext.javaVersions.test.compiler, gradle.ext.javaVersions.test.release, gradle.ext.javaVersions.test.launcher].toSet() - // Force to release with JDK 8. It used to not work on JDK11 because of the hibernate-orm-modules module, - // but this limitation might be resolved now that this module has been deleted? - if ( javaVersionsInUse != [JavaLanguageVersion.of( 8 )].toSet() ) { - throw new IllegalStateException( "Please use JDK 8 to perform the release. Currently using: ${javaVersionsInUse}" ) + if ( javaVersionsInUse != [JavaLanguageVersion.of( 11 )].toSet() ) { + throw new IllegalStateException( "Please use JDK 11 to perform the release. Currently using: ${javaVersionsInUse}" ) } } } diff --git a/documentation/src/main/asciidoc/topical/metamodelgen/MetamodelGenerator.adoc b/documentation/src/main/asciidoc/topical/metamodelgen/MetamodelGenerator.adoc index 8ab5448502..09a02c09a3 100644 --- a/documentation/src/main/asciidoc/topical/metamodelgen/MetamodelGenerator.adoc +++ b/documentation/src/main/asciidoc/topical/metamodelgen/MetamodelGenerator.adoc @@ -376,9 +376,6 @@ Just check the "Enable annotation processing" option, configure the directory fo generated sources and finally add the Hibernate Static Metamodel Generator and Jakarta Persistence jar files to the factory path. -If you use JDK 11+, you also need to add the `javax.xml.bind:jaxb-api` and -`org.glassfish.jaxb:jaxb-runtime` jars as JAXB is not included in the JDK anymore. - image:eclipse-annotation-processor-config.png[] === Processor specific options diff --git a/documentation/src/main/asciidoc/userguide/Preface.adoc b/documentation/src/main/asciidoc/userguide/Preface.adoc index 95c422c70e..4e307c1afd 100644 --- a/documentation/src/main/asciidoc/userguide/Preface.adoc +++ b/documentation/src/main/asciidoc/userguide/Preface.adoc @@ -24,14 +24,7 @@ However, Hibernate can certainly help you to remove or encapsulate vendor-specif == System Requirements -Hibernate 5.2 and later versions require at least Java 1.8 and JDBC 4.2. - -Hibernate 5.1 and older versions require at least Java 1.6 and JDBC 4.0. - -[TIP] -==== -When building Hibernate 5.1 or older from sources, you need Java 1.7 due to a bug in the JDK 1.6 compiler. -==== +Hibernate 6.0 and later versions require at least Java 11 and JDBC 4.2. === Getting Started Guide diff --git a/gradle/java-module.gradle b/gradle/java-module.gradle index 036e450ee9..404f3d8bee 100644 --- a/gradle/java-module.gradle +++ b/gradle/java-module.gradle @@ -149,28 +149,14 @@ else { // Configure generated bytecode // "sourceCompatibility" is not supported with toolchains. We have to work around that limitation. tasks.compileJava.configure { - if ( gradle.ext.javaVersions.main.compiler.asInt() < 9 ) { - options.compilerArgs << '-source' - options.compilerArgs << gradle.ext.javaVersions.main.release.toString() - options.compilerArgs << '-target' - options.compilerArgs << gradle.ext.javaVersions.main.release.toString() - } else { - options.release = gradle.ext.javaVersions.main.release.asInt() - // Needs add-opens because of https://github.com/gradle/gradle/issues/15538 - options.forkOptions.jvmArgs.addAll( ["--add-opens", "jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED"] ) - } + options.release = gradle.ext.javaVersions.main.release.asInt() + // Needs add-opens because of https://github.com/gradle/gradle/issues/15538 + options.forkOptions.jvmArgs.addAll( ["--add-opens", "jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED"] ) } tasks.compileTestJava.configure { - if ( gradle.ext.javaVersions.test.compiler.asInt() < 9 ) { - options.compilerArgs << '-source' - options.compilerArgs << gradle.ext.javaVersions.test.release.toString() - options.compilerArgs << '-target' - options.compilerArgs << gradle.ext.javaVersions.test.release.toString() - } else { - options.release = gradle.ext.javaVersions.test.release.asInt() - // Needs add-opens because of https://github.com/gradle/gradle/issues/15538 - options.forkOptions.jvmArgs.addAll( ["--add-opens", "jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED"] ) - } + options.release = gradle.ext.javaVersions.test.release.asInt() + // Needs add-opens because of https://github.com/gradle/gradle/issues/15538 + options.forkOptions.jvmArgs.addAll( ["--add-opens", "jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED"] ) } // Configure version of Java tools @@ -268,10 +254,8 @@ tasks.withType( Test.class ).each { test -> test.usesService( project.gradle.sharedServices.registrations.getByName( 'databaseService' ).service ) - if ( gradle.ext.javaVersions.test.launcher.asInt() >= 9 ) { - // Byteman needs this property to be set, https://developer.jboss.org/thread/274997 - test.jvmArgs += ["-Djdk.attach.allowAttachSelf=true"] - } + // Byteman needs this property to be set, https://developer.jboss.org/thread/274997 + test.jvmArgs += ["-Djdk.attach.allowAttachSelf=true"] test.jvmArgumentProviders.add( new HeapDumpPathProvider( path: project.layout.buildDirectory.dir("OOM-dump") ) diff --git a/gradle/javadoc.gradle b/gradle/javadoc.gradle index 3634127a6d..aae0d5b09d 100644 --- a/gradle/javadoc.gradle +++ b/gradle/javadoc.gradle @@ -45,7 +45,7 @@ javadoc { use = true encoding = 'UTF-8' links += [ - 'https://docs.oracle.com/javase/8/docs/api/', + 'https://docs.oracle.com/en/java/javase/11/docs/api/', 'https://jakarta.ee/specifications/platform/9/apidocs/' ] tags = [ "apiNote", 'implSpec', 'implNote', 'todo' ] diff --git a/hibernate-core/hibernate-core.gradle b/hibernate-core/hibernate-core.gradle index 272a920c0b..4a7face3f1 100644 --- a/hibernate-core/hibernate-core.gradle +++ b/hibernate-core/hibernate-core.gradle @@ -193,13 +193,11 @@ task generateEnversStaticMetamodel( tasks.withType( Test.class ).each { test -> test.systemProperty 'file.encoding', 'utf-8' - if ( gradle.ext.javaVersions.test.launcher.asInt() >= 9 ) { - // See org.hibernate.boot.model.naming.NamingHelperTest.DefaultCharset.set - test.jvmArgs( ['--add-opens', 'java.base/java.nio.charset=ALL-UNNAMED'] ) - // Weld needs this to generate proxies - test.jvmArgs( ['--add-opens', 'java.base/java.security=ALL-UNNAMED'] ) - test.jvmArgs( ['--add-opens', 'java.base/java.lang=ALL-UNNAMED'] ) - } + // See org.hibernate.boot.model.naming.NamingHelperTest.DefaultCharset.set + test.jvmArgs( ['--add-opens', 'java.base/java.nio.charset=ALL-UNNAMED'] ) + // Weld needs this to generate proxies + test.jvmArgs( ['--add-opens', 'java.base/java.security=ALL-UNNAMED'] ) + test.jvmArgs( ['--add-opens', 'java.base/java.lang=ALL-UNNAMED'] ) test.beforeTest { descriptor -> //println "Starting test: " + descriptor diff --git a/hibernate-orm-build/build.gradle b/hibernate-orm-build/build.gradle index 57fa7e155a..e8bdbd215d 100644 --- a/hibernate-orm-build/build.gradle +++ b/hibernate-orm-build/build.gradle @@ -20,8 +20,8 @@ dependencies { tasks.compileJava { options.encoding = 'UTF-8' - sourceCompatibility = 8 - targetCompatibility = 8 + sourceCompatibility = 11 + targetCompatibility = 11 } gradlePlugin { diff --git a/hibernate-proxool/hibernate-proxool.gradle b/hibernate-proxool/hibernate-proxool.gradle index 7283046028..7a86abd380 100644 --- a/hibernate-proxool/hibernate-proxool.gradle +++ b/hibernate-proxool/hibernate-proxool.gradle @@ -18,13 +18,11 @@ dependencies { } test { - if ( gradle.ext.javaVersions.test.launcher.asInt() >= 9 ) { - // Proxool needs this to define classes for some reason. Stack trace: - // at org.logicalcobwebs.cglib.core.ReflectUtils.defineClass(ReflectUtils.java:372) - // at org.logicalcobwebs.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:193) - // at org.logicalcobwebs.cglib.core.KeyFactory$Generator.create(KeyFactory.java:177) - // at org.logicalcobwebs.cglib.core.KeyFactory.create(KeyFactory.java:149) - // at org.logicalcobwebs.cglib.proxy.Enhancer.(Enhancer.java:96) - jvmArgs( ['--add-opens', 'java.base/java.lang=ALL-UNNAMED'] ) - } + // Proxool needs this to define classes for some reason. Stack trace: + // at org.logicalcobwebs.cglib.core.ReflectUtils.defineClass(ReflectUtils.java:372) + // at org.logicalcobwebs.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:193) + // at org.logicalcobwebs.cglib.core.KeyFactory$Generator.create(KeyFactory.java:177) + // at org.logicalcobwebs.cglib.core.KeyFactory.create(KeyFactory.java:149) + // at org.logicalcobwebs.cglib.proxy.Enhancer.(Enhancer.java:96) + jvmArgs( ['--add-opens', 'java.base/java.lang=ALL-UNNAMED'] ) } \ No newline at end of file diff --git a/release/release.gradle b/release/release.gradle index 2f563857c1..58bc3861b5 100644 --- a/release/release.gradle +++ b/release/release.gradle @@ -189,15 +189,13 @@ task aggregateJavadocs(type: Javadoc) { 'https://javaee.github.io/javaee-spec/javadocs/' ] - if ( gradle.ext.javaVersions.main.compiler.asInt() >= 11 ) { - //The need to set `--source 1.8` applies to all JVMs after 11, and also to 11 - // but after excluding the first two builds; see also specific comments on - // https://bugs.openjdk.java.net/browse/JDK-8212233?focusedCommentId=14245762 - // For now, let's be compatible with JDK 11.0.3+. We can improve on it if people - // complain they cannot build with JDK 11.0.0, 11.0.1 and 11.0.2. - logger.lifecycle "Forcing Javadoc in Java 8 compatible mode" - options.source = gradle.ext.baselineJavaVersion - } + //The need to set `--source 1.8` applies to all JVMs after 11, and also to 11 + // but after excluding the first two builds; see also specific comments on + // https://bugs.openjdk.java.net/browse/JDK-8212233?focusedCommentId=14245762 + // For now, let's be compatible with JDK 11.0.3+. We can improve on it if people + // complain they cannot build with JDK 11.0.0, 11.0.1 and 11.0.2. + logger.lifecycle "Forcing Javadoc in Java 8 compatible mode" + options.source = gradle.ext.baselineJavaVersion options.addStringOption( 'Xdoclint:none', '-quiet' ) diff --git a/settings.gradle b/settings.gradle index afceeaa178..14b6a4fe5c 100644 --- a/settings.gradle +++ b/settings.gradle @@ -26,8 +26,8 @@ includeBuild('hibernate-orm-build') apply from: file( 'gradle/gradle-enterprise.gradle' ) -if ( !JavaVersion.current().java8Compatible ) { - throw new GradleException( "Gradle must be run with Java 8 or later" ) +if ( !JavaVersion.current().java11Compatible ) { + throw new GradleException( "Gradle must be run with Java 11 or later" ) } buildCache { @@ -38,7 +38,7 @@ buildCache { remote(HttpBuildCache) { enabled = false } } -gradle.ext.baselineJavaVersion = JavaLanguageVersion.of( 8 ) +gradle.ext.baselineJavaVersion = JavaLanguageVersion.of( 11 ) // Gradle does bytecode transformation on tests. // You can't use bytecode higher than what Gradle supports, even with toolchains. @@ -129,18 +129,7 @@ include 'hibernate-jcache' include 'hibernate-micrometer' include 'hibernate-graalvm' - -// The plugin used to generate Java modules was compiled using JDK11. -// This means even with toolchains, Gradle needs to be run with Java 11+ in order to run Java modules ITs. -// We might be able to get rid of that limitation by relying on Gradle's built-in support for Java modules, -// but I (Yoann) tried and failed to make it work. -// See https://docs.gradle.org/current/samples/sample_java_modules_multi_project.html -if ( JavaVersion.current().isJava11Compatible() && gradle.ext.javaVersions.test.release.asInt() >= 9 ) { - include 'hibernate-integrationtest-java-modules' -} -else { - logger.warn( '[WARN] Skipping Java module path integration tests because the JDK does not support it' ) -} +include 'hibernate-integrationtest-java-modules' include 'documentation' include 'release' diff --git a/tooling/hibernate-gradle-plugin/hibernate-gradle-plugin.gradle b/tooling/hibernate-gradle-plugin/hibernate-gradle-plugin.gradle index 33ee877707..b74c0070b4 100644 --- a/tooling/hibernate-gradle-plugin/hibernate-gradle-plugin.gradle +++ b/tooling/hibernate-gradle-plugin/hibernate-gradle-plugin.gradle @@ -87,10 +87,8 @@ else { } tasks.test { - if ( gradle.ext.javaVersions.test.launcher.asInt() >= 9 ) { - // Needs add-opens because Gradle uses illegal accesses to inject... mocks? Something like that. - jvmArgs( ['--add-opens', 'java.base/java.lang=ALL-UNNAMED'] ) - } + // Needs add-opens because Gradle uses illegal accesses to inject... mocks? Something like that. + jvmArgs( ['--add-opens', 'java.base/java.lang=ALL-UNNAMED'] ) } task release { diff --git a/tooling/project-template/src/template/resources/build.gradle.kts b/tooling/project-template/src/template/resources/build.gradle.kts index 9a1afd7d5a..71d782381e 100644 --- a/tooling/project-template/src/template/resources/build.gradle.kts +++ b/tooling/project-template/src/template/resources/build.gradle.kts @@ -76,5 +76,5 @@ task( "compile" ) { } configure { - sourceCompatibility = JavaVersion.VERSION_1_8 + sourceCompatibility = JavaVersion.VERSION_11 }