From ee37898f2becf18ecf9d731824a74f38ac4e0108 Mon Sep 17 00:00:00 2001
From: Rey <89825425+Kingg22@users.noreply.github.com>
Date: Thu, 16 Oct 2025 17:53:37 -0500
Subject: [PATCH 01/12] HHH-19876 build(local plugins): make antlr plugin cache
compatible
Description:
Helper use Logger directly instead of project.getLogger
Spec remove inject, suppress, receive as parameter ObjectFactory and ProjectLayout
GrammarDescriptorFactory replace deprecated usage of create with lazy register. TODO this factory can be removed and add callback in plugin to all grammarDescriptors.
SplitGrammarDescriptor remove unused field, this is not injected
SplitGrammarGenerationTask refactor usage of project, receive ProjectLayout, ProviderFactory and AntlrClasspath injected, use logger of task
AntlrPlugin instance AntlrSpec manually and add as extensions.
---
.../org/hibernate/orm/antlr/AntlrHelper.java | 14 ++---
.../org/hibernate/orm/antlr/AntlrPlugin.java | 8 +--
.../org/hibernate/orm/antlr/AntlrSpec.java | 9 +---
.../orm/antlr/GrammarDescriptorFactory.java | 11 ++--
.../orm/antlr/SplitGrammarDescriptor.java | 8 +--
.../orm/antlr/SplitGrammarGenerationTask.java | 52 +++++++++++--------
6 files changed, 48 insertions(+), 54 deletions(-)
diff --git a/local-build-plugins/src/main/java/org/hibernate/orm/antlr/AntlrHelper.java b/local-build-plugins/src/main/java/org/hibernate/orm/antlr/AntlrHelper.java
index 1ec73679fe41..72ce3348c2be 100644
--- a/local-build-plugins/src/main/java/org/hibernate/orm/antlr/AntlrHelper.java
+++ b/local-build-plugins/src/main/java/org/hibernate/orm/antlr/AntlrHelper.java
@@ -4,6 +4,8 @@
*/
package org.hibernate.orm.antlr;
+import org.gradle.api.logging.Logger;
+
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
@@ -11,8 +13,6 @@
import java.io.FileWriter;
import java.io.IOException;
-import org.gradle.api.Project;
-
/**
* This is intended to deal with this Antlr issue
*
@@ -36,7 +36,7 @@ private AntlrHelper() {
public static void stripSillyGeneratedFromLines(
File generationDirectory,
File outputDirectory,
- Project project) {
+ Logger logger) {
final File[] generatedJavaFiles = generationDirectory.listFiles( (dir, name) -> name.endsWith( ".java" ) );
if ( generatedJavaFiles == null ) {
// warn?
@@ -44,15 +44,15 @@ public static void stripSillyGeneratedFromLines(
}
for ( int i = 0; i < generatedJavaFiles.length; i++ ) {
- stripSillyGeneratedFromLineFromFile( generatedJavaFiles[i], outputDirectory, project );
+ stripSillyGeneratedFromLineFromFile( generatedJavaFiles[i], outputDirectory, logger );
}
}
private static void stripSillyGeneratedFromLineFromFile(
File generatedJavaFile,
File outputDirectory,
- Project project) {
- project.getLogger().lifecycle( "Stripping silly generated-from line from {} into {}",
+ Logger logger) {
+ logger.lifecycle( "Stripping silly generated-from line from {} into {}",
generatedJavaFile.getAbsolutePath(),
outputDirectory.getAbsolutePath() );
@@ -73,7 +73,7 @@ private static void stripSillyGeneratedFromLineFromFile(
}
}
catch (IOException e) {
- project.getLogger().lifecycle( "Unable to remove the generated-from line added by Antlr to the generated file: {}", e.getMessage() );
+ logger.lifecycle( "Unable to remove the generated-from line added by Antlr to the generated file: {}", e.getMessage() );
}
}
}
diff --git a/local-build-plugins/src/main/java/org/hibernate/orm/antlr/AntlrPlugin.java b/local-build-plugins/src/main/java/org/hibernate/orm/antlr/AntlrPlugin.java
index fb135ec77e77..0962b1f567e7 100644
--- a/local-build-plugins/src/main/java/org/hibernate/orm/antlr/AntlrPlugin.java
+++ b/local-build-plugins/src/main/java/org/hibernate/orm/antlr/AntlrPlugin.java
@@ -37,12 +37,8 @@ public void apply(Project project) {
task.setGroup( ANTLR );
} );
- final AntlrSpec antlrSpec = project.getExtensions().create(
- AntlrSpec.REGISTRATION_NAME,
- AntlrSpec.class,
- project,
- groupingTask
- );
+ final AntlrSpec antlrSpec = new AntlrSpec( project.getLayout(), project.getObjects(), groupingTask, project );
+ project.getExtensions().add( AntlrSpec.class, AntlrSpec.REGISTRATION_NAME, antlrSpec );
final Configuration antlrDependencies = project.getConfigurations().maybeCreate( ANTLR );
diff --git a/local-build-plugins/src/main/java/org/hibernate/orm/antlr/AntlrSpec.java b/local-build-plugins/src/main/java/org/hibernate/orm/antlr/AntlrSpec.java
index f12c234d3470..5532ea30846c 100644
--- a/local-build-plugins/src/main/java/org/hibernate/orm/antlr/AntlrSpec.java
+++ b/local-build-plugins/src/main/java/org/hibernate/orm/antlr/AntlrSpec.java
@@ -4,8 +4,6 @@
*/
package org.hibernate.orm.antlr;
-import javax.inject.Inject;
-
import org.gradle.api.NamedDomainObjectContainer;
import org.gradle.api.Project;
import org.gradle.api.Task;
@@ -25,12 +23,7 @@ public class AntlrSpec {
private final NamedDomainObjectContainer grammarDescriptors;
- @Inject
- @SuppressWarnings("UnstableApiUsage")
- public AntlrSpec(Project project, TaskProvider groupingTask) {
- final ObjectFactory objectFactory = project.getObjects();
- final ProjectLayout layout = project.getLayout();
-
+ public AntlrSpec(ProjectLayout layout, ObjectFactory objectFactory, TaskProvider groupingTask, Project project) {
grammarBaseDirectory = objectFactory.directoryProperty();
grammarBaseDirectory.convention( layout.getProjectDirectory().dir( "src/main/antlr" ) );
diff --git a/local-build-plugins/src/main/java/org/hibernate/orm/antlr/GrammarDescriptorFactory.java b/local-build-plugins/src/main/java/org/hibernate/orm/antlr/GrammarDescriptorFactory.java
index af0ad45ea0ae..28bd6041bb62 100644
--- a/local-build-plugins/src/main/java/org/hibernate/orm/antlr/GrammarDescriptorFactory.java
+++ b/local-build-plugins/src/main/java/org/hibernate/orm/antlr/GrammarDescriptorFactory.java
@@ -25,16 +25,19 @@ public GrammarDescriptorFactory(AntlrSpec antlrSpec, TaskProvider grouping
@Override
public SplitGrammarDescriptor create(String name) {
- final SplitGrammarDescriptor descriptor = new SplitGrammarDescriptor( name, antlrSpec, project.getObjects() );
+ final SplitGrammarDescriptor descriptor = new SplitGrammarDescriptor( name, project.getObjects() );
- final SplitGrammarGenerationTask generatorTask = project.getTasks().create(
+ final TaskProvider generatorTask = project.getTasks().register(
determineTaskName( name ),
SplitGrammarGenerationTask.class,
descriptor,
antlrSpec
);
- generatorTask.setDescription( "Performs Antlr grammar generation for the `" + name + "` grammar" );
- generatorTask.setGroup( "antlr" );
+ generatorTask.configure( (task) -> {
+ task.setDescription( "Performs Antlr grammar generation for the `" + name + "` grammar" );
+ task.setGroup( AntlrPlugin.ANTLR );
+ task.getAntlrClasspath().from( project.getConfigurations().named( "antlr" ) );
+ } );
groupingTask.configure( (task) -> task.dependsOn( generatorTask ) );
return descriptor;
diff --git a/local-build-plugins/src/main/java/org/hibernate/orm/antlr/SplitGrammarDescriptor.java b/local-build-plugins/src/main/java/org/hibernate/orm/antlr/SplitGrammarDescriptor.java
index afffea83c5c3..d53862cdd621 100644
--- a/local-build-plugins/src/main/java/org/hibernate/orm/antlr/SplitGrammarDescriptor.java
+++ b/local-build-plugins/src/main/java/org/hibernate/orm/antlr/SplitGrammarDescriptor.java
@@ -4,8 +4,6 @@
*/
package org.hibernate.orm.antlr;
-import javax.inject.Inject;
-
import org.gradle.api.Named;
import org.gradle.api.model.ObjectFactory;
import org.gradle.api.provider.Property;
@@ -15,8 +13,6 @@
*/
public class SplitGrammarDescriptor implements Named {
private final String name;
- private final AntlrSpec antlrSpec;
-
private final Property packageName;
private final Property lexerFileName;
private final Property parserFileName;
@@ -24,10 +20,8 @@ public class SplitGrammarDescriptor implements Named {
private final Property generateVisitor;
private final Property generateListener;
- @Inject
- public SplitGrammarDescriptor(String name, AntlrSpec antlrSpec, ObjectFactory objectFactory) {
+ public SplitGrammarDescriptor(String name, ObjectFactory objectFactory) {
this.name = name;
- this.antlrSpec = antlrSpec;
packageName = objectFactory.property( String.class );
lexerFileName = objectFactory.property( String.class );
diff --git a/local-build-plugins/src/main/java/org/hibernate/orm/antlr/SplitGrammarGenerationTask.java b/local-build-plugins/src/main/java/org/hibernate/orm/antlr/SplitGrammarGenerationTask.java
index 9a50f5544eb8..6d062e95d7f7 100644
--- a/local-build-plugins/src/main/java/org/hibernate/orm/antlr/SplitGrammarGenerationTask.java
+++ b/local-build-plugins/src/main/java/org/hibernate/orm/antlr/SplitGrammarGenerationTask.java
@@ -4,22 +4,26 @@
*/
package org.hibernate.orm.antlr;
-import java.io.File;
-
-import javax.inject.Inject;
-
import org.gradle.api.DefaultTask;
+import org.gradle.api.file.ConfigurableFileCollection;
import org.gradle.api.file.Directory;
+import org.gradle.api.file.ProjectLayout;
import org.gradle.api.file.RegularFile;
import org.gradle.api.provider.Provider;
+import org.gradle.api.provider.ProviderFactory;
import org.gradle.api.tasks.CacheableTask;
+import org.gradle.api.tasks.Classpath;
import org.gradle.api.tasks.InputFile;
+import org.gradle.api.tasks.InputFiles;
import org.gradle.api.tasks.OutputDirectory;
import org.gradle.api.tasks.PathSensitive;
import org.gradle.api.tasks.PathSensitivity;
import org.gradle.api.tasks.TaskAction;
import org.gradle.process.ExecOperations;
+import javax.inject.Inject;
+import java.io.File;
+
import static org.hibernate.orm.antlr.AntlrHelper.stripSillyGeneratedFromLines;
/**
@@ -40,33 +44,37 @@ public abstract class SplitGrammarGenerationTask extends DefaultTask {
public SplitGrammarGenerationTask(
SplitGrammarDescriptor grammarDescriptor,
AntlrSpec antlrSpec,
- ExecOperations execOperations) {
+ ExecOperations execOperations,
+ ProjectLayout layout,
+ ProviderFactory providers
+ ) {
this.grammarDescriptor = grammarDescriptor;
this.execOperations = execOperations;
- lexerGrammarFile = getProject().provider( () -> {
+ lexerGrammarFile = providers.provider( () -> {
final Directory grammarBaseDirectory = antlrSpec.getGrammarBaseDirectory().get();
final Directory grammarDirectory = grammarBaseDirectory.dir( grammarDescriptor.getPackageName().get().replace( '.', '/' ) );
return grammarDirectory.file( grammarDescriptor.getLexerFileName().get() );
} );
- parserGrammarFile = getProject().provider( () -> {
+ parserGrammarFile = providers.provider( () -> {
final Directory grammarBaseDirectory = antlrSpec.getGrammarBaseDirectory().get();
final Directory grammarDirectory = grammarBaseDirectory.dir( grammarDescriptor.getPackageName().get().replace( '.', '/' ) );
return grammarDirectory.file( grammarDescriptor.getParserFileName().get() );
} );
- generationDirectory = getProject().provider( () -> {
- final Directory baseDirectory = getProject().getLayout().getBuildDirectory().dir( "tmp/antlr" ).get();
- return baseDirectory.dir( grammarDescriptor.getPackageName().get().replace( '.', '/' ) );
- } );
+ generationDirectory = layout.getBuildDirectory()
+ .dir( "tmp/antlr" )
+ .map(dir -> dir.dir(grammarDescriptor.getPackageName().get().replace('.', '/')));
- outputDirectory = getProject().provider( () -> {
- final Directory outputBaseDirectory = antlrSpec.getOutputBaseDirectory().get();
- return outputBaseDirectory.dir( grammarDescriptor.getPackageName().get().replace( '.', '/' ) );
- } );
+ outputDirectory = antlrSpec.getOutputBaseDirectory()
+ .map(dir -> dir.dir(grammarDescriptor.getPackageName().get().replace('.', '/')));
}
+ @InputFiles
+ @Classpath
+ public abstract ConfigurableFileCollection getAntlrClasspath();
+
@InputFile
@PathSensitive( PathSensitivity.RELATIVE )
public Provider getLexerGrammarFile() {
@@ -100,14 +108,14 @@ public void generateLexerAndParser() {
generateLexer( generationDir );
generateParser( generationDir );
- stripSillyGeneratedFromLines( generationDir, outputDir, getProject() );
+ stripSillyGeneratedFromLines( generationDir, outputDir, getLogger() );
}
private void generateLexer(File outputDir) {
final File lexerFile = getLexerGrammarFile().get().getAsFile();
- getProject().getLogger().lifecycle(
+ getLogger().lifecycle(
"Starting Antlr lexer grammar generation `{}` : `{}` -> `{}`",
grammarDescriptor.getName(),
lexerFile.getAbsolutePath(),
@@ -118,9 +126,9 @@ private void generateLexer(File outputDir) {
execOperations.javaexec(
(javaExecSpec) -> {
javaExecSpec.getMainClass().set( "org.antlr.v4.Tool" );
- javaExecSpec.classpath( getProject().getConfigurations().getByName( "antlr" ) );
+ javaExecSpec.classpath( getAntlrClasspath() );
javaExecSpec.args(
- "-o", getProject().relativePath( outputDir.getAbsolutePath() ),
+ "-o", outputDir.getAbsolutePath(),
"-long-messages",
lexerFile.getAbsolutePath()
);
@@ -131,7 +139,7 @@ private void generateLexer(File outputDir) {
private void generateParser(File outputDir) {
final File parserFile = getParserGrammarFile().get().getAsFile();
- getProject().getLogger().lifecycle(
+ getLogger().lifecycle(
"Starting Antlr parser grammar generation `{}` : `{}` -> `{}`",
grammarDescriptor.getName(),
parserFile.getAbsolutePath(),
@@ -142,9 +150,9 @@ private void generateParser(File outputDir) {
execOperations.javaexec(
(javaExecSpec) -> {
javaExecSpec.getMainClass().set( "org.antlr.v4.Tool" );
- javaExecSpec.classpath( getProject().getConfigurations().named( "antlr" ) );
+ javaExecSpec.classpath( getAntlrClasspath() );
javaExecSpec.args(
- "-o", getProject().relativePath( outputDir.getAbsolutePath() ),
+ "-o", outputDir.getAbsolutePath(),
"-long-messages",
parserFile.getAbsolutePath()
);
From 18898778b0fcebd14c6073bcdd34c213cb634f92 Mon Sep 17 00:00:00 2001
From: Rey <89825425+Kingg22@users.noreply.github.com>
Date: Thu, 16 Oct 2025 17:59:33 -0500
Subject: [PATCH 02/12] HHH-19876 build(local plugins): make xjc plugin cache
compatible
Description:
XjcListenerImpl use Logger directly instead of project.getLogger()
XjcTask refactor to make an abstract class and receive inputs and outputs injected
---
.../hibernate/build/xjc/XjcListenerImpl.java | 20 +++----
.../java/org/hibernate/build/xjc/XjcTask.java | 54 ++++++-------------
2 files changed, 26 insertions(+), 48 deletions(-)
diff --git a/local-build-plugins/src/main/java/org/hibernate/build/xjc/XjcListenerImpl.java b/local-build-plugins/src/main/java/org/hibernate/build/xjc/XjcListenerImpl.java
index 6c6a94f38385..1942953fe937 100644
--- a/local-build-plugins/src/main/java/org/hibernate/build/xjc/XjcListenerImpl.java
+++ b/local-build-plugins/src/main/java/org/hibernate/build/xjc/XjcListenerImpl.java
@@ -5,7 +5,7 @@
package org.hibernate.build.xjc;
import com.sun.tools.xjc.XJCListener;
-import org.gradle.api.Project;
+import org.gradle.api.logging.Logger;
import org.xml.sax.SAXParseException;
/**
@@ -15,12 +15,12 @@
*/
public class XjcListenerImpl extends XJCListener {
private final String schemaName;
- private final Project project;
+ private final Logger logger;
private boolean hadErrors;
- public XjcListenerImpl(String schemaName, Project project) {
+ public XjcListenerImpl(String schemaName, Logger logger) {
this.schemaName = schemaName;
- this.project = project;
+ this.logger = logger;
}
public boolean hadErrors() {
@@ -29,33 +29,33 @@ public boolean hadErrors() {
@Override
public void generatedFile(String fileName, int current, int total) {
- project.getLogger().info( "XJC generated file ({}) : {}", schemaName, fileName );
+ logger.info( "XJC generated file ({}) : {}", schemaName, fileName );
}
@Override
public void message(String msg) {
- project.getLogger().info( "XJC message ({}) : {}", schemaName, msg );
+ logger.info( "XJC message ({}) : {}", schemaName, msg );
}
@Override
public void info(SAXParseException exception) {
- project.getLogger().info( "XJC info ({})", schemaName, exception );
+ logger.info( "XJC info ({})", schemaName, exception );
}
@Override
public void warning(SAXParseException exception) {
- project.getLogger().warn( "XJC warning ({})",schemaName, exception );
+ logger.warn( "XJC warning ({})",schemaName, exception );
}
@Override
public void error(SAXParseException exception) {
hadErrors = true;
- project.getLogger().error( "XJC error ({})", schemaName, exception );
+ logger.error( "XJC error ({})", schemaName, exception );
}
@Override
public void fatalError(SAXParseException exception) {
hadErrors = true;
- project.getLogger().error( "XJC fatal error ({})", schemaName, exception );
+ logger.error( "XJC fatal error ({})", schemaName, exception );
}
}
diff --git a/local-build-plugins/src/main/java/org/hibernate/build/xjc/XjcTask.java b/local-build-plugins/src/main/java/org/hibernate/build/xjc/XjcTask.java
index de38970a8d47..9a3900e552e7 100644
--- a/local-build-plugins/src/main/java/org/hibernate/build/xjc/XjcTask.java
+++ b/local-build-plugins/src/main/java/org/hibernate/build/xjc/XjcTask.java
@@ -15,11 +15,13 @@
import org.gradle.api.tasks.Input;
import org.gradle.api.tasks.InputFile;
import org.gradle.api.tasks.Internal;
+import org.gradle.api.tasks.Optional;
import org.gradle.api.tasks.OutputDirectory;
import org.gradle.api.tasks.PathSensitive;
import org.gradle.api.tasks.PathSensitivity;
import org.gradle.api.tasks.TaskAction;
+import javax.inject.Inject;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Set;
@@ -30,57 +32,33 @@
* @author Steve Ebersole
*/
@CacheableTask
-public class XjcTask extends DefaultTask {
- private final Property schemaName;
- private final DirectoryProperty outputDirectory;
- private final RegularFileProperty xsdFile;
- private final RegularFileProperty xjcBindingFile;
- private final SetProperty xjcPlugins;
+public abstract class XjcTask extends DefaultTask {
+ @Inject
public XjcTask() {
- schemaName = getProject().getObjects().property( String.class );
-
- xsdFile = getProject().getObjects().fileProperty();
- xjcBindingFile = getProject().getObjects().fileProperty();
- xjcPlugins = getProject().getObjects().setProperty( String.class );
-
- outputDirectory = getProject().getObjects().directoryProperty();
-
- schemaName.convention( xsdFile.map( regularFile -> regularFile.getAsFile().getName() ) );
}
@Internal
- public Property getSchemaName() {
- return schemaName;
- }
+ public abstract Property getSchemaName();
@InputFile
@PathSensitive(PathSensitivity.RELATIVE)
- public RegularFileProperty getXsdFile() {
- return xsdFile;
- }
+ public abstract RegularFileProperty getXsdFile();
+ @Optional
@InputFile
@PathSensitive(PathSensitivity.RELATIVE)
- public RegularFileProperty getXjcBindingFile() {
- return xjcBindingFile;
- }
+ public abstract RegularFileProperty getXjcBindingFile();
@Input
- public SetProperty getXjcPlugins() {
- return xjcPlugins;
- }
+ public abstract SetProperty getXjcPlugins();
@OutputDirectory
- public DirectoryProperty getOutputDirectory() {
- return outputDirectory;
- }
+ public abstract DirectoryProperty getOutputDirectory();
@TaskAction
public void generateJaxbBindings() {
- getProject().delete( outputDirectory.get().getAsFileTree() );
-
- final XjcListenerImpl listener = new XjcListenerImpl( schemaName.get(), getProject() );
+ final XjcListenerImpl listener = new XjcListenerImpl( getSchemaName().get(), getLogger() );
final String[] args = buildXjcArgs();
try {
@@ -94,15 +72,15 @@ public void generateJaxbBindings() {
private String[] buildXjcArgs() {
final ArrayList argsList = new ArrayList<>();
- Collections.addAll( argsList, "-d", outputDirectory.get().getAsFile().getAbsolutePath() );
- Collections.addAll( argsList, "-b", xjcBindingFile.get().getAsFile().getAbsolutePath());
+ Collections.addAll( argsList, "-d", getOutputDirectory().get().getAsFile().getAbsolutePath() );
+ Collections.addAll( argsList, "-b", getXjcBindingFile().get().getAsFile().getAbsolutePath());
argsList.add( "-extension" );
argsList.add( "-no-header" );
argsList.add( "-npa" );
- if ( xjcPlugins.isPresent() ) {
- final Set xjcPluginsToEnable = xjcPlugins.get();
+ if ( getXjcPlugins().isPresent() ) {
+ final Set xjcPluginsToEnable = getXjcPlugins().get();
if ( !xjcPluginsToEnable.isEmpty() ) {
xjcPluginsToEnable.forEach( (ext) -> {
argsList.add( "-X" + ext );
@@ -110,7 +88,7 @@ private String[] buildXjcArgs() {
}
}
- argsList.add( xsdFile.get().getAsFile().getAbsolutePath() );
+ argsList.add( getXsdFile().get().getAsFile().getAbsolutePath() );
return argsList.toArray( new String[0] );
}
From edcd6e5a385f9314d5d98eb776f27b296d9143f5 Mon Sep 17 00:00:00 2001
From: Rey <89825425+Kingg22@users.noreply.github.com>
Date: Thu, 16 Oct 2025 18:00:51 -0500
Subject: [PATCH 03/12] HHH-19876 build(gradle files): mark as not compatible
with configuration cache projects using hibernate version inject plugin
This is an external plugin needs to be updated to be compatible with CC
---
hibernate-core/hibernate-core.gradle | 4 ++++
tooling/hibernate-ant/hibernate-ant.gradle | 6 +++++-
tooling/metamodel-generator/hibernate-processor.gradle | 4 ++++
3 files changed, 13 insertions(+), 1 deletion(-)
diff --git a/hibernate-core/hibernate-core.gradle b/hibernate-core/hibernate-core.gradle
index 191bdb8e9041..6d0963777cd5 100644
--- a/hibernate-core/hibernate-core.gradle
+++ b/hibernate-core/hibernate-core.gradle
@@ -295,3 +295,7 @@ tasks.sourcesJar.dependsOn ':hibernate-core:generateGraphParser'
tasks.sourcesJar.dependsOn ':hibernate-core:generateHqlParser'
tasks.sourcesJar.dependsOn ':hibernate-core:generateSqlScriptParser'
tasks.sourcesJar.dependsOn ':hibernate-core:generateOrderingParser'
+
+tasks.named( "compileJava", JavaCompile ) {
+ notCompatibleWithConfigurationCache( "org.hibernate.build.version-injection plugin call project in execution time" )
+}
diff --git a/tooling/hibernate-ant/hibernate-ant.gradle b/tooling/hibernate-ant/hibernate-ant.gradle
index a6af63b9a823..ea18471b4847 100644
--- a/tooling/hibernate-ant/hibernate-ant.gradle
+++ b/tooling/hibernate-ant/hibernate-ant.gradle
@@ -11,4 +11,8 @@ dependencies {
compileOnly libs.ant
implementation project( ':hibernate-core' )
testImplementation libs.ant
-}
\ No newline at end of file
+}
+
+tasks.named( "compileJava", JavaCompile ) {
+ notCompatibleWithConfigurationCache( "org.hibernate.build.version-injection plugin call project in execution time" )
+}
diff --git a/tooling/metamodel-generator/hibernate-processor.gradle b/tooling/metamodel-generator/hibernate-processor.gradle
index 78ce0fde9b79..a444ef91aad7 100644
--- a/tooling/metamodel-generator/hibernate-processor.gradle
+++ b/tooling/metamodel-generator/hibernate-processor.gradle
@@ -168,3 +168,7 @@ tasks.forbiddenApisQuarkusOrmPanache {
tasks.forbiddenApisQuarkusHrPanache {
enabled = false
}
+
+tasks.named( "compileJava", JavaCompile ) {
+ notCompatibleWithConfigurationCache( "org.hibernate.build.version-injection plugin call project in execution time" )
+}
From 41a9aaa8af39dc2d5ff3a3a909dc0439b7ec4744 Mon Sep 17 00:00:00 2001
From: Rey <89825425+Kingg22@users.noreply.github.com>
Date: Thu, 16 Oct 2025 18:01:41 -0500
Subject: [PATCH 04/12] HHH-19876 build(local plugins): mark as not compatible
with CC Jar using bnd plugin
After https://github.com/bndtools/bnd/issues/6346 is fixed and released, remove this
---
local-build-plugins/src/main/groovy/local.java-module.gradle | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/local-build-plugins/src/main/groovy/local.java-module.gradle b/local-build-plugins/src/main/groovy/local.java-module.gradle
index ac895043ac1a..aeb33081ba87 100644
--- a/local-build-plugins/src/main/groovy/local.java-module.gradle
+++ b/local-build-plugins/src/main/groovy/local.java-module.gradle
@@ -291,7 +291,10 @@ tasks.withType(Jar).configureEach {
}
}
-tasks.named("jar") {
+tasks.named( "jar", Jar ) {
+ // Remove when https://github.com/bndtools/bnd/issues/6346 is fixed
+ notCompatibleWithConfigurationCache( "Bnd plugin access to project at execution time" )
+
manifest {
attributes(
// Java 9 module name
From 75a13019129343a84c1bfb76eb02b20dd935978c Mon Sep 17 00:00:00 2001
From: Rey <89825425+Kingg22@users.noreply.github.com>
Date: Thu, 16 Oct 2025 22:27:15 -0500
Subject: [PATCH 05/12] HHH-19876 build(local plugins): make properties cache
configuration compatible
Description:
AsciiDocWriter remove unused property project.
SettingsDocExtension replace usage of project with objectFactory, remove closure overload is not supported for CC, action is enough.
SettingsDocGenerationTask replace usage of project with ObjectFactory and add OrmBuildDetails public lazy set value
SettingsDocumentationPlugin update creating of extension and task
---
.../orm/properties/AsciiDocWriter.java | 15 +++++------
.../orm/properties/SettingsDocExtension.java | 26 ++++++-------------
.../properties/SettingsDocGenerationTask.java | 26 ++++++++++++-------
.../SettingsDocumentationPlugin.java | 6 ++---
4 files changed, 34 insertions(+), 39 deletions(-)
diff --git a/local-build-plugins/src/main/java/org/hibernate/orm/properties/AsciiDocWriter.java b/local-build-plugins/src/main/java/org/hibernate/orm/properties/AsciiDocWriter.java
index 2f4e3be27de7..a8772177261b 100644
--- a/local-build-plugins/src/main/java/org/hibernate/orm/properties/AsciiDocWriter.java
+++ b/local-build-plugins/src/main/java/org/hibernate/orm/properties/AsciiDocWriter.java
@@ -5,6 +5,8 @@
package org.hibernate.orm.properties;
+import org.gradle.api.file.RegularFile;
+
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
@@ -14,9 +16,6 @@
import java.util.Map;
import java.util.SortedSet;
-import org.gradle.api.Project;
-import org.gradle.api.file.RegularFile;
-
/**
* @author Marko Bekhta
*/
@@ -25,8 +24,8 @@ public class AsciiDocWriter {
public static void writeToFile(
String anchorNameBase,
Map> settingDescriptorMap,
- RegularFile outputFile,
- Project project) {
+ RegularFile outputFile
+ ) {
final File outputFileAsFile = outputFile.getAsFile();
try {
Files.createDirectories( outputFileAsFile.getParentFile().toPath() );
@@ -36,7 +35,7 @@ public static void writeToFile(
}
try ( FileWriter fileWriter = new FileWriter( outputFileAsFile ) ) {
- write( anchorNameBase, settingDescriptorMap, fileWriter, project );
+ write( anchorNameBase, settingDescriptorMap, fileWriter );
}
catch (IOException e) {
throw new RuntimeException( "Failed to produce asciidoc output for collected properties", e );
@@ -46,8 +45,8 @@ public static void writeToFile(
private static void write(
String anchorNameBase,
Map> settingDescriptorMap,
- FileWriter writer,
- Project project) throws IOException {
+ FileWriter writer
+ ) throws IOException {
for ( Map.Entry> entry : settingDescriptorMap.entrySet() ) {
final SettingsDocSection sectionDescriptor = entry.getKey();
final SortedSet sectionSettingDescriptors = entry.getValue();
diff --git a/local-build-plugins/src/main/java/org/hibernate/orm/properties/SettingsDocExtension.java b/local-build-plugins/src/main/java/org/hibernate/orm/properties/SettingsDocExtension.java
index 1a2f93a78435..f9743856215d 100644
--- a/local-build-plugins/src/main/java/org/hibernate/orm/properties/SettingsDocExtension.java
+++ b/local-build-plugins/src/main/java/org/hibernate/orm/properties/SettingsDocExtension.java
@@ -4,17 +4,14 @@
*/
package org.hibernate.orm.properties;
-import javax.inject.Inject;
-
import org.gradle.api.Action;
import org.gradle.api.NamedDomainObjectContainer;
-import org.gradle.api.Project;
import org.gradle.api.file.DirectoryProperty;
import org.gradle.api.file.RegularFileProperty;
+import org.gradle.api.model.ObjectFactory;
import org.gradle.api.provider.Property;
-import org.gradle.util.internal.ConfigureUtil;
-import groovy.lang.Closure;
+import javax.inject.Inject;
/**
* DSL extension for configuring aspects of the settings documentation process
@@ -32,13 +29,13 @@ public class SettingsDocExtension {
private final RegularFileProperty outputFile;
@Inject
- public SettingsDocExtension(Project project) {
- javadocDirectory = project.getObjects().directoryProperty();
- publishedDocsUrl = project.getObjects().property( String.class );
- anchorNameBase = project.getObjects().property( String.class );
- sections = project.getObjects().domainObjectContainer( SettingsDocSection.class, SettingsDocSection::create );
+ public SettingsDocExtension(ObjectFactory objects) {
+ javadocDirectory = objects.directoryProperty();
+ publishedDocsUrl = objects.property( String.class );
+ anchorNameBase = objects.property( String.class );
+ sections = objects.domainObjectContainer( SettingsDocSection.class, SettingsDocSection::create );
- outputFile = project.getObjects().fileProperty();
+ outputFile = objects.fileProperty();
}
/**
@@ -82,13 +79,6 @@ public void sections(Action> acti
action.execute( getSections() );
}
- /**
- * @see #getSections()
- */
- public void sections(Closure> closure) {
- ConfigureUtil.configure( closure, getSections() );
- }
-
/**
* The file where the settings doc should be written
*
diff --git a/local-build-plugins/src/main/java/org/hibernate/orm/properties/SettingsDocGenerationTask.java b/local-build-plugins/src/main/java/org/hibernate/orm/properties/SettingsDocGenerationTask.java
index 4e7ab98ca5d7..a52c1e7360fd 100644
--- a/local-build-plugins/src/main/java/org/hibernate/orm/properties/SettingsDocGenerationTask.java
+++ b/local-build-plugins/src/main/java/org/hibernate/orm/properties/SettingsDocGenerationTask.java
@@ -6,9 +6,9 @@
import org.gradle.api.DefaultTask;
import org.gradle.api.NamedDomainObjectContainer;
-import org.gradle.api.Project;
import org.gradle.api.file.DirectoryProperty;
import org.gradle.api.file.RegularFileProperty;
+import org.gradle.api.model.ObjectFactory;
import org.gradle.api.provider.Property;
import org.gradle.api.tasks.IgnoreEmptyDirectories;
import org.gradle.api.tasks.Input;
@@ -33,28 +33,30 @@ public class SettingsDocGenerationTask extends DefaultTask {
private final Property publishedDocsUrl;
private final Property anchorNameBase;
private final NamedDomainObjectContainer sections;
+ private final Property ormBuildDetails;
private final RegularFileProperty outputFile;
@Inject
- public SettingsDocGenerationTask(SettingsDocExtension dslExtension, Project project) {
+ public SettingsDocGenerationTask(SettingsDocExtension dslExtension, ObjectFactory objects) {
setGroup( TASK_GROUP_NAME );
setDescription( "Collects descriptions of Hibernate configuration properties in preparation for inclusion in the User Guide" );
- getInputs().property( "ormVersion", getProject().getExtensions().getByType( OrmBuildDetails.class ).getHibernateVersion() );
+ ormBuildDetails = objects.property( OrmBuildDetails.class );
+ getInputs().property( "ormVersion", ormBuildDetails.map( OrmBuildDetails::getHibernateVersion ) );
- javadocDirectory = project.getObjects().directoryProperty();
+ javadocDirectory = objects.directoryProperty();
javadocDirectory.convention( dslExtension.getJavadocDirectory() );
- publishedDocsUrl = project.getObjects().property( String.class );
+ publishedDocsUrl = objects.property( String.class );
publishedDocsUrl.convention( dslExtension.getPublishedDocsUrl() );
- anchorNameBase = project.getObjects().property( String.class );
+ anchorNameBase = objects.property( String.class );
anchorNameBase.convention( dslExtension.getAnchorNameBase() );
sections = dslExtension.getSections();
- outputFile = project.getObjects().fileProperty();
+ outputFile = objects.fileProperty();
outputFile.convention( dslExtension.getOutputFile() );
}
@@ -79,6 +81,11 @@ public NamedDomainObjectContainer getSections() {
return sections;
}
+ @Nested
+ public Property getOrmBuildDetails() {
+ return ormBuildDetails;
+ }
+
@OutputFile
public RegularFileProperty getOutputFile() {
return outputFile;
@@ -88,7 +95,7 @@ public RegularFileProperty getOutputFile() {
public void generateSettingsDocumentation() {
final String publishedJavadocUrl = publishedDocsUrl.get()
+ "/"
- + getProject().getExtensions().getByType( OrmBuildDetails.class ).getHibernateVersionFamily()
+ + ormBuildDetails.get().getHibernateVersionFamily()
+ "/javadocs/";
AsciiDocWriter.writeToFile(
@@ -98,8 +105,7 @@ public void generateSettingsDocumentation() {
sections.getAsMap(),
publishedJavadocUrl
),
- outputFile.get(),
- getProject()
+ outputFile.get()
);
}
}
diff --git a/local-build-plugins/src/main/java/org/hibernate/orm/properties/SettingsDocumentationPlugin.java b/local-build-plugins/src/main/java/org/hibernate/orm/properties/SettingsDocumentationPlugin.java
index 7635d4cfcc53..9fde8ba6edc6 100644
--- a/local-build-plugins/src/main/java/org/hibernate/orm/properties/SettingsDocumentationPlugin.java
+++ b/local-build-plugins/src/main/java/org/hibernate/orm/properties/SettingsDocumentationPlugin.java
@@ -25,13 +25,13 @@ public void apply(Project project) {
project.getPluginManager().apply( ModuleAspect.class );
// create and register the DSL extension
- final SettingsDocExtension dslExtension = new SettingsDocExtension( project );
- project.getExtensions().add( EXTENSION_NAME, dslExtension );
+ final SettingsDocExtension dslExtension = project.getExtensions()
+ .create( SettingsDocExtension.class, EXTENSION_NAME, SettingsDocExtension.class );
dslExtension.getJavadocDirectory().convention( project.getLayout().getBuildDirectory().dir( "javadocs" ) );
dslExtension.getPublishedDocsUrl().convention( "https://docs.jboss.org/hibernate/orm" );
dslExtension.getOutputFile().convention( project.getLayout().getBuildDirectory().file( "asciidoc/fragments/config-settings.adoc" ) );
// create the generation task
- project.getTasks().register( TASK_NAME, SettingsDocGenerationTask.class, dslExtension, project );
+ project.getTasks().register( TASK_NAME, SettingsDocGenerationTask.class, dslExtension );
}
}
From 9bde9e05a2de9d6cd95b3e10ac18be91f7ae6aa1 Mon Sep 17 00:00:00 2001
From: Rey <89825425+Kingg22@users.noreply.github.com>
Date: Thu, 16 Oct 2025 22:36:34 -0500
Subject: [PATCH 06/12] HHH-19876 build(local plugins): make jandex post CC
compatible
Description:
AbstractJandexAwareTask add OrmBuildDetails as provider and use ObjectFactory to set, make abstract getIndexManager
All subclasses of JandexAwareTask replace usage of project with Layout and ObjectFactory
IndexManager change type of artifactsToProcess to ConfigurableFileCollection, add annotations of Input and Outputs, replace usage of Project with ArchiveOperations and Logger to create index, ObjectFactory and Layout in constructor.
IndexerTask remove redundant getters with nested property IndexManager, pass ArchiveOperations to create index
ReportGenerationPlugin create IndexManager with gradle and pass from configuration jars, add configure for all subtypes of JandexAware, use register instead of maybeCreate task group
---
.../orm/post/AbstractJandexAwareTask.java | 45 +++++++-----
.../orm/post/DeprecationReportTask.java | 24 ++++---
.../hibernate/orm/post/DialectReportTask.java | 15 ++--
.../orm/post/IncubationReportTask.java | 22 +++---
.../org/hibernate/orm/post/IndexManager.java | 69 +++++++++++--------
.../org/hibernate/orm/post/IndexerTask.java | 38 ++++------
.../orm/post/InternalsReportTask.java | 24 ++++---
.../hibernate/orm/post/LoggingReportTask.java | 36 +++++-----
.../orm/post/ReportGenerationPlugin.java | 36 ++++++----
9 files changed, 172 insertions(+), 137 deletions(-)
diff --git a/local-build-plugins/src/main/java/org/hibernate/orm/post/AbstractJandexAwareTask.java b/local-build-plugins/src/main/java/org/hibernate/orm/post/AbstractJandexAwareTask.java
index d09b4695f0af..25ee62d405aa 100644
--- a/local-build-plugins/src/main/java/org/hibernate/orm/post/AbstractJandexAwareTask.java
+++ b/local-build-plugins/src/main/java/org/hibernate/orm/post/AbstractJandexAwareTask.java
@@ -4,22 +4,15 @@
*/
package org.hibernate.orm.post;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStreamWriter;
-import java.util.List;
-import java.util.TreeSet;
-import java.util.function.Consumer;
-
import org.gradle.api.DefaultTask;
import org.gradle.api.file.RegularFile;
+import org.gradle.api.model.ObjectFactory;
+import org.gradle.api.provider.Property;
import org.gradle.api.provider.Provider;
import org.gradle.api.tasks.InputFile;
import org.gradle.api.tasks.Internal;
+import org.gradle.api.tasks.Nested;
import org.gradle.api.tasks.OutputFile;
-
import org.hibernate.build.OrmBuildDetails;
import org.jboss.jandex.AnnotationInstance;
import org.jboss.jandex.AnnotationTarget;
@@ -28,32 +21,46 @@
import org.jboss.jandex.Index;
import org.jboss.jandex.MethodInfo;
+import javax.inject.Inject;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+import java.util.List;
+import java.util.TreeSet;
+import java.util.function.Consumer;
+
import static org.hibernate.orm.post.ReportGenerationPlugin.TASK_GROUP_NAME;
/**
* @author Steve Ebersole
*/
public abstract class AbstractJandexAwareTask extends DefaultTask {
- private final Provider indexManager;
+ private final Property ormBuildDetails;
- public AbstractJandexAwareTask() {
+ @Inject
+ public AbstractJandexAwareTask(ObjectFactory objects) {
setGroup( TASK_GROUP_NAME );
+ ormBuildDetails = objects.property( OrmBuildDetails.class );
- this.indexManager = getProject().provider( () -> getProject().getExtensions().getByType( IndexManager.class ) );
- getInputs().property( "version", getProject().getExtensions().getByType( OrmBuildDetails.class ).getHibernateVersion() );
+ getInputs().property( "version", ormBuildDetails.map( OrmBuildDetails::getHibernateVersion ) );
}
@Internal
protected abstract Provider getTaskReportFileReference();
- @Internal
- protected IndexManager getIndexManager() {
- return indexManager.get();
+ @Nested
+ protected abstract Property getIndexManager();
+
+ @Nested
+ public Property getOrmBuildDetails() {
+ return ormBuildDetails;
}
@InputFile
public Provider getIndexFileReference() {
- return indexManager.get().getIndexFileReferenceAccess();
+ return getIndexManager().get().getIndexFileReferenceAccess();
}
@OutputFile
@@ -94,7 +101,7 @@ protected void processAnnotations(DotName annotationName, TreeSet inc
}
protected void processAnnotations(Consumer inclusions, DotName... annotationNames) {
- final Index index = getIndexManager().getIndex();
+ final Index index = getIndexManager().get().getIndex();
for ( int i = 0; i < annotationNames.length; i++ ) {
final DotName annotationName = annotationNames[ i ];
diff --git a/local-build-plugins/src/main/java/org/hibernate/orm/post/DeprecationReportTask.java b/local-build-plugins/src/main/java/org/hibernate/orm/post/DeprecationReportTask.java
index 3828820cadbd..5ac149785d6c 100644
--- a/local-build-plugins/src/main/java/org/hibernate/orm/post/DeprecationReportTask.java
+++ b/local-build-plugins/src/main/java/org/hibernate/orm/post/DeprecationReportTask.java
@@ -4,32 +4,36 @@
*/
package org.hibernate.orm.post;
-import java.io.IOException;
-import java.io.OutputStreamWriter;
-import java.util.Comparator;
-import java.util.TreeSet;
-
+import org.gradle.api.file.ProjectLayout;
import org.gradle.api.file.RegularFile;
+import org.gradle.api.model.ObjectFactory;
import org.gradle.api.provider.Property;
import org.gradle.api.provider.Provider;
import org.gradle.api.tasks.TaskAction;
-
import org.jboss.jandex.DotName;
+import javax.inject.Inject;
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+import java.util.Comparator;
+import java.util.TreeSet;
+
/**
* @author Steve Ebersole
*/
-public class DeprecationReportTask extends AbstractJandexAwareTask {
+public abstract class DeprecationReportTask extends AbstractJandexAwareTask {
public static final String REMOVE_ANN_NAME = "org.hibernate.Remove";
public static final String DEPRECATED_ANN_NAME = Deprecated.class.getName();
private final Property reportFile;
- public DeprecationReportTask() {
+ @Inject
+ public DeprecationReportTask(ProjectLayout layout, ObjectFactory objects) {
+ super( objects );
setDescription( "Generates a report for things considered deprecated" );
- reportFile = getProject().getObjects().fileProperty();
- reportFile.convention( getProject().getLayout().getBuildDirectory().file( "orm/reports/deprecated.txt" ) );
+ reportFile = objects.fileProperty();
+ reportFile.convention( layout.getBuildDirectory().file( "orm/reports/deprecated.txt" ) );
}
@Override
diff --git a/local-build-plugins/src/main/java/org/hibernate/orm/post/DialectReportTask.java b/local-build-plugins/src/main/java/org/hibernate/orm/post/DialectReportTask.java
index 2bb37e757022..ccf625b7ed7b 100644
--- a/local-build-plugins/src/main/java/org/hibernate/orm/post/DialectReportTask.java
+++ b/local-build-plugins/src/main/java/org/hibernate/orm/post/DialectReportTask.java
@@ -6,6 +6,7 @@
import org.gradle.api.file.ConfigurableFileCollection;
import org.gradle.api.file.RegularFile;
+import org.gradle.api.model.ObjectFactory;
import org.gradle.api.provider.Property;
import org.gradle.api.provider.Provider;
import org.gradle.api.tasks.Input;
@@ -15,6 +16,7 @@
import org.jboss.jandex.ClassInfo;
import org.jboss.jandex.Index;
+import javax.inject.Inject;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
@@ -37,11 +39,14 @@ public abstract class DialectReportTask extends AbstractJandexAwareTask {
private final Property sourcePackage;
private final Property reportFile;
- public DialectReportTask() {
+ @Inject
+ public DialectReportTask(ObjectFactory objects) {
+ super( objects );
setDescription( "Generates a report of the supported Dialects" );
- dialectReportSources = getProject().getObjects().fileCollection();
- sourcePackage = getProject().getObjects().property(String.class);
- reportFile = getProject().getObjects().fileProperty();
+
+ dialectReportSources = objects.fileCollection();
+ sourcePackage = objects.property( String.class );
+ reportFile = objects.fileProperty();
}
@Input
@@ -69,7 +74,7 @@ public void generateDialectReport() {
final ClassLoader classLoader = Helper.asClassLoader( dialectReportSources );
final DialectClassDelegate dialectClassDelegate = new DialectClassDelegate( classLoader );
- final Index index = getIndexManager().getIndex();
+ final Index index = getIndexManager().get().getIndex();
final Collection allDialectClasses = index.getAllKnownSubclasses( DialectClassDelegate.DIALECT_CLASS_NAME );
String sourcePackagePrefix = this.sourcePackage.get() + ".";
allDialectClasses.removeIf( c -> !c.name().toString().startsWith( sourcePackagePrefix ) );
diff --git a/local-build-plugins/src/main/java/org/hibernate/orm/post/IncubationReportTask.java b/local-build-plugins/src/main/java/org/hibernate/orm/post/IncubationReportTask.java
index 7035e6229ce9..b557fe469bf1 100644
--- a/local-build-plugins/src/main/java/org/hibernate/orm/post/IncubationReportTask.java
+++ b/local-build-plugins/src/main/java/org/hibernate/orm/post/IncubationReportTask.java
@@ -4,19 +4,20 @@
*/
package org.hibernate.orm.post;
-import java.io.IOException;
-import java.io.OutputStreamWriter;
-import java.util.Comparator;
-import java.util.TreeSet;
-import javax.inject.Inject;
-
+import org.gradle.api.file.ProjectLayout;
import org.gradle.api.file.RegularFile;
+import org.gradle.api.model.ObjectFactory;
import org.gradle.api.provider.Property;
import org.gradle.api.provider.Provider;
import org.gradle.api.tasks.TaskAction;
-
import org.jboss.jandex.DotName;
+import javax.inject.Inject;
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+import java.util.Comparator;
+import java.util.TreeSet;
+
/**
* @author Steve Ebersole
@@ -27,10 +28,11 @@ public abstract class IncubationReportTask extends AbstractJandexAwareTask {
private final Property reportFile;
@Inject
- public IncubationReportTask() {
+ public IncubationReportTask(ProjectLayout layout, ObjectFactory objects) {
+ super( objects );
setDescription( "Generates a report for things considered incubating" );
- reportFile = getProject().getObjects().fileProperty();
- reportFile.convention( getProject().getLayout().getBuildDirectory().file( "orm/reports/incubating.txt" ) );
+ reportFile = objects.fileProperty();
+ reportFile.convention( layout.getBuildDirectory().file( "orm/reports/incubating.txt" ) );
}
@Override
diff --git a/local-build-plugins/src/main/java/org/hibernate/orm/post/IndexManager.java b/local-build-plugins/src/main/java/org/hibernate/orm/post/IndexManager.java
index cdbb1790a8fb..25f1084d3b67 100644
--- a/local-build-plugins/src/main/java/org/hibernate/orm/post/IndexManager.java
+++ b/local-build-plugins/src/main/java/org/hibernate/orm/post/IndexManager.java
@@ -4,74 +4,86 @@
*/
package org.hibernate.orm.post;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.nio.file.Files;
-import java.util.Comparator;
-import java.util.List;
-import java.util.Set;
-import java.util.TreeSet;
-
-import org.gradle.api.Project;
-import org.gradle.api.artifacts.Configuration;
+import org.gradle.api.file.ArchiveOperations;
+import org.gradle.api.file.ConfigurableFileCollection;
import org.gradle.api.file.FileTree;
import org.gradle.api.file.FileVisitDetails;
import org.gradle.api.file.FileVisitor;
+import org.gradle.api.file.ProjectLayout;
import org.gradle.api.file.RegularFile;
import org.gradle.api.file.RelativePath;
+import org.gradle.api.logging.Logger;
+import org.gradle.api.model.ObjectFactory;
import org.gradle.api.provider.Provider;
-
+import org.gradle.api.tasks.InputFiles;
+import org.gradle.api.tasks.Internal;
+import org.gradle.api.tasks.OutputFile;
+import org.gradle.api.tasks.SkipWhenEmpty;
import org.jboss.jandex.ClassSummary;
import org.jboss.jandex.Index;
import org.jboss.jandex.IndexReader;
import org.jboss.jandex.IndexWriter;
import org.jboss.jandex.Indexer;
+import javax.inject.Inject;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Set;
+import java.util.TreeSet;
+
/**
* Encapsulates and manages a Jandex Index
*
* @author Steve Ebersole
*/
public class IndexManager {
- private final Configuration artifactsToProcess;
+ private final ConfigurableFileCollection artifactsToProcess;
private final Provider indexFileReferenceAccess;
private final Provider packageFileReferenceAccess;
- private final Project project;
-
private Index index;
private TreeSet internalPackageNames;
- public IndexManager(Configuration artifactsToProcess, Project project) {
- this.artifactsToProcess = artifactsToProcess;
- this.indexFileReferenceAccess = project.getLayout()
+ @Inject
+ public IndexManager(ObjectFactory objects, ProjectLayout layout) {
+ this.artifactsToProcess = objects.fileCollection();
+ this.indexFileReferenceAccess = layout
.getBuildDirectory()
.file( "orm/reports/indexing/jandex.idx" );
- this.packageFileReferenceAccess = project.getLayout()
+ this.packageFileReferenceAccess = layout
.getBuildDirectory()
.file( "orm/reports/indexing/internal-packages.txt" );
- this.project = project;
}
- public Configuration getArtifactsToProcess() {
+
+ @InputFiles
+ @SkipWhenEmpty
+ public ConfigurableFileCollection getArtifactsToProcess() {
return artifactsToProcess;
}
+ @OutputFile
public Provider getIndexFileReferenceAccess() {
return indexFileReferenceAccess;
}
+ @OutputFile
public Provider getPackageFileReferenceAccess() {
return packageFileReferenceAccess;
}
+ @Internal
public TreeSet getInternalPackageNames() {
return internalPackageNames;
}
+ @Internal
public Index getIndex() {
if ( index == null ) {
index = loadIndex( indexFileReferenceAccess );
@@ -125,7 +137,7 @@ private static TreeSet loadInternalPackageNames(Provider
/**
* Used from {@link IndexerTask} as its action
*/
- void index() {
+ void index(ArchiveOperations archiveOperations, Logger logger) {
if ( index != null ) {
throw new IllegalStateException( "Index was already created or loaded" );
}
@@ -134,10 +146,10 @@ void index() {
internalPackageNames = new TreeSet<>( Comparator.comparing( Inclusion::getPath ) );
// note: each of `artifacts` is a jar-file
- final Set artifacts = artifactsToProcess.resolve();
+ final Set artifacts = artifactsToProcess.getFiles();
artifacts.forEach( (jar) -> {
- final FileTree jarFileTree = project.zipTree( jar );
+ final FileTree jarFileTree = archiveOperations.zipTree( jar );
jarFileTree.visit(
new FileVisitor() {
private boolean isInOrmPackage(RelativePath relativePath) {
@@ -169,8 +181,7 @@ public void visitFile(FileVisitDetails details) {
try (final FileInputStream stream = new FileInputStream( details.getFile() )) {
final ClassSummary classSummary = indexer.indexWithSummary( stream );
if ( classSummary == null ) {
- project.getLogger()
- .lifecycle( "Problem indexing class file - " + details.getFile()
+ logger.lifecycle( "Problem indexing class file - {}", details.getFile()
.getAbsolutePath() );
}
}
diff --git a/local-build-plugins/src/main/java/org/hibernate/orm/post/IndexerTask.java b/local-build-plugins/src/main/java/org/hibernate/orm/post/IndexerTask.java
index 64b779b5dc99..de14f659b936 100644
--- a/local-build-plugins/src/main/java/org/hibernate/orm/post/IndexerTask.java
+++ b/local-build-plugins/src/main/java/org/hibernate/orm/post/IndexerTask.java
@@ -5,14 +5,13 @@
package org.hibernate.orm.post;
import org.gradle.api.DefaultTask;
-import org.gradle.api.artifacts.Configuration;
-import org.gradle.api.file.RegularFile;
-import org.gradle.api.provider.Provider;
-import org.gradle.api.tasks.InputFiles;
-import org.gradle.api.tasks.OutputFile;
-import org.gradle.api.tasks.SkipWhenEmpty;
+import org.gradle.api.file.ArchiveOperations;
+import org.gradle.api.provider.Property;
+import org.gradle.api.tasks.Nested;
import org.gradle.api.tasks.TaskAction;
+import javax.inject.Inject;
+
import static org.hibernate.orm.post.ReportGenerationPlugin.AGGREGATE_CONFIG_NAME;
import static org.hibernate.orm.post.ReportGenerationPlugin.TASK_GROUP_NAME;
@@ -22,33 +21,20 @@
* @author Steve Ebersole
*/
public abstract class IndexerTask extends DefaultTask {
- private final Provider indexManager;
+ private final ArchiveOperations archiveOperations;
- public IndexerTask() {
+ @Inject
+ public IndexerTask(ArchiveOperations archiveOperations) {
+ this.archiveOperations = archiveOperations;
setGroup( TASK_GROUP_NAME );
setDescription( String.format( "Builds a Jandex Index from the artifacts attached to the `%s` Configuration", AGGREGATE_CONFIG_NAME ) );
-
- indexManager = getProject().provider( () -> getProject().getExtensions().getByType( IndexManager.class ) );
- }
-
- @InputFiles
- @SkipWhenEmpty
- public Configuration getArtifactsToProcess() {
- return indexManager.get().getArtifactsToProcess();
}
- @OutputFile
- public Provider getIndexFileReference() {
- return indexManager.get().getIndexFileReferenceAccess();
- }
-
- @OutputFile
- public Provider getPackageFileReferenceAccess() {
- return indexManager.get().getPackageFileReferenceAccess();
- }
+ @Nested
+ public abstract Property getIndexManager();
@TaskAction
public void createIndex() {
- indexManager.get().index();
+ getIndexManager().get().index( archiveOperations, getLogger() );
}
}
diff --git a/local-build-plugins/src/main/java/org/hibernate/orm/post/InternalsReportTask.java b/local-build-plugins/src/main/java/org/hibernate/orm/post/InternalsReportTask.java
index 2d8ec8caf96f..dea1a8576e27 100644
--- a/local-build-plugins/src/main/java/org/hibernate/orm/post/InternalsReportTask.java
+++ b/local-build-plugins/src/main/java/org/hibernate/orm/post/InternalsReportTask.java
@@ -4,18 +4,20 @@
*/
package org.hibernate.orm.post;
-import java.io.IOException;
-import java.io.OutputStreamWriter;
-import java.util.Comparator;
-import java.util.TreeSet;
-
+import org.gradle.api.file.ProjectLayout;
import org.gradle.api.file.RegularFile;
+import org.gradle.api.model.ObjectFactory;
import org.gradle.api.provider.Property;
import org.gradle.api.provider.Provider;
import org.gradle.api.tasks.TaskAction;
-
import org.jboss.jandex.DotName;
+import javax.inject.Inject;
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+import java.util.Comparator;
+import java.util.TreeSet;
+
/**
* @author Steve Ebersole
@@ -25,10 +27,12 @@ public abstract class InternalsReportTask extends AbstractJandexAwareTask {
private final Property reportFile;
- public InternalsReportTask() {
+ @Inject
+ public InternalsReportTask(ProjectLayout layout, ObjectFactory objects) {
+ super( objects );
setDescription( "Generates a report of things consider internal" );
- reportFile = getProject().getObjects().fileProperty();
- reportFile.convention( getProject().getLayout().getBuildDirectory().file( "orm/reports/internal.txt" ) );
+ reportFile = objects.fileProperty();
+ reportFile.convention( layout.getBuildDirectory().file( "orm/reports/internal.txt" ) );
}
@Override
@@ -39,7 +43,7 @@ protected Provider getTaskReportFileReference() {
@TaskAction
public void generateInternalsReport() {
final TreeSet internals = new TreeSet<>( Comparator.comparing( Inclusion::getPath ) );
- internals.addAll( getIndexManager().getInternalPackageNames() );
+ internals.addAll( getIndexManager().get().getInternalPackageNames() );
processAnnotations( DotName.createSimple( INTERNAL_ANN_NAME ), internals );
writeReport( internals );
diff --git a/local-build-plugins/src/main/java/org/hibernate/orm/post/LoggingReportTask.java b/local-build-plugins/src/main/java/org/hibernate/orm/post/LoggingReportTask.java
index d6a0d92fe7b7..1e91bfb5f63f 100644
--- a/local-build-plugins/src/main/java/org/hibernate/orm/post/LoggingReportTask.java
+++ b/local-build-plugins/src/main/java/org/hibernate/orm/post/LoggingReportTask.java
@@ -4,6 +4,19 @@
*/
package org.hibernate.orm.post;
+import org.gradle.api.file.ProjectLayout;
+import org.gradle.api.file.RegularFile;
+import org.gradle.api.model.ObjectFactory;
+import org.gradle.api.provider.Property;
+import org.gradle.api.provider.Provider;
+import org.gradle.api.tasks.TaskAction;
+import org.jboss.jandex.AnnotationInstance;
+import org.jboss.jandex.AnnotationValue;
+import org.jboss.jandex.ClassInfo;
+import org.jboss.jandex.DotName;
+import org.jboss.jandex.Index;
+
+import javax.inject.Inject;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
@@ -15,17 +28,6 @@
import java.util.TreeMap;
import java.util.TreeSet;
-import org.gradle.api.file.RegularFile;
-import org.gradle.api.provider.Property;
-import org.gradle.api.provider.Provider;
-import org.gradle.api.tasks.TaskAction;
-
-import org.jboss.jandex.AnnotationInstance;
-import org.jboss.jandex.AnnotationValue;
-import org.jboss.jandex.ClassInfo;
-import org.jboss.jandex.DotName;
-import org.jboss.jandex.Index;
-
import static org.jboss.jandex.DotName.createSimple;
/**
@@ -46,10 +48,12 @@ public abstract class LoggingReportTask extends AbstractJandexAwareTask {
private final Property reportFile;
- public LoggingReportTask() {
+ @Inject
+ public LoggingReportTask(ProjectLayout layout, ObjectFactory objects) {
+ super( objects );
setDescription( "Generates a report of \"system\" logging" );
- reportFile = getProject().getObjects().fileProperty();
- reportFile.convention( getProject().getLayout().getBuildDirectory().file( "orm/generated/logging/index.adoc" ) );
+ reportFile = objects.fileProperty();
+ reportFile.convention( layout.getBuildDirectory().file( "orm/generated/logging/index.adoc" ) );
}
@Override
@@ -62,7 +66,7 @@ public void generateLoggingReport() {
final TreeMap subSystemByName = new TreeMap<>();
final TreeSet idRanges = new TreeSet<>( Comparator.comparing( IdRange::getMinValue ) );
- final Index index = getIndexManager().getIndex();
+ final Index index = getIndexManager().get().getIndex();
final List subSysAnnUsages = index.getAnnotations( SUB_SYS_ANN_NAME );
final List msgLoggerAnnUsages = index.getAnnotations( MSG_LOGGER_ANN_NAME );
@@ -118,7 +122,7 @@ public void generateLoggingReport() {
private IdRange calculateIdRange(AnnotationInstance msgLoggerAnnUsage, SubSystem subSystem) {
final ClassInfo loggerClassInfo = msgLoggerAnnUsage.target().asClass();
- getProject().getLogger().lifecycle( "MessageLogger (`{}`) missing id-range", loggerClassInfo.simpleName() );
+ getLogger().lifecycle( "MessageLogger (`{}`) missing id-range", loggerClassInfo.simpleName() );
final List messageAnnUsages = loggerClassInfo.annotations( MSG_ANN_NAME );
if ( messageAnnUsages.isEmpty() ) {
diff --git a/local-build-plugins/src/main/java/org/hibernate/orm/post/ReportGenerationPlugin.java b/local-build-plugins/src/main/java/org/hibernate/orm/post/ReportGenerationPlugin.java
index b5ff4cf22dcf..c96d272d33a2 100644
--- a/local-build-plugins/src/main/java/org/hibernate/orm/post/ReportGenerationPlugin.java
+++ b/local-build-plugins/src/main/java/org/hibernate/orm/post/ReportGenerationPlugin.java
@@ -7,6 +7,7 @@
import org.gradle.api.Plugin;
import org.gradle.api.Project;
import org.gradle.api.artifacts.Configuration;
+import org.hibernate.build.OrmBuildDetails;
/**
* @author Steve Ebersole
@@ -23,12 +24,20 @@ public void apply(Project project) {
.maybeCreate( AGGREGATE_CONFIG_NAME )
.setDescription( "Used to collect the jars with classes files to be used in the aggregation reports for `@Internal`, `@Incubating`, etc" );
- final var indexManager = new IndexManager( artifactsToProcess, project );
- project.getExtensions().add( "indexManager", indexManager );
+ final var indexManager = project.getExtensions().create( "indexManager", IndexManager.class );
+ indexManager.getArtifactsToProcess().from( artifactsToProcess );
+
+ final var details = project.getExtensions().getByType( OrmBuildDetails.class );
+ project.getTasks().withType( AbstractJandexAwareTask.class )
+ .configureEach(task -> {
+ task.getOrmBuildDetails().set( details );
+ task.getIndexManager().set( indexManager );
+ });
final var indexerTask = project.getTasks().register(
"buildAggregatedIndex",
- IndexerTask.class
+ IndexerTask.class,
+ task -> task.getIndexManager().set( indexManager )
);
final var incubatingTask = project.getTasks().register(
@@ -83,14 +92,17 @@ public void apply(Project project) {
}
);
- final var groupingTask = project.getTasks().maybeCreate( "generateReports" );
- groupingTask.setGroup( TASK_GROUP_NAME );
- groupingTask.dependsOn( indexerTask );
- groupingTask.dependsOn( incubatingTask );
- groupingTask.dependsOn( deprecationTask );
- groupingTask.dependsOn( internalsTask );
- groupingTask.dependsOn( loggingTask );
- groupingTask.dependsOn( dialectTableTask );
- groupingTask.dependsOn( communityDialectTableTask );
+ project.getTasks().register( "generateReports", groupingTask -> {
+ groupingTask.setGroup( TASK_GROUP_NAME );
+ groupingTask.dependsOn(
+ indexerTask,
+ incubatingTask,
+ deprecationTask,
+ internalsTask,
+ loggingTask,
+ dialectTableTask,
+ communityDialectTableTask
+ );
+ } );
}
}
From 2b6e1057b9b7e1419fe57d6a9fbdeb928282f7c8 Mon Sep 17 00:00:00 2001
From: Rey <89825425+Kingg22@users.noreply.github.com>
Date: Thu, 16 Oct 2025 22:37:08 -0500
Subject: [PATCH 07/12] HHH-19876 build(local plugins): add annotations input
and output in classes of build details
---
.../org/hibernate/build/OrmBuildDetails.java | 34 +++++++++++++------
.../org/hibernate/build/ReleaseDetails.java | 9 +++++
2 files changed, 33 insertions(+), 10 deletions(-)
diff --git a/local-build-plugins/src/main/java/org/hibernate/build/OrmBuildDetails.java b/local-build-plugins/src/main/java/org/hibernate/build/OrmBuildDetails.java
index 06ddb4589da7..dd19cf4132ae 100644
--- a/local-build-plugins/src/main/java/org/hibernate/build/OrmBuildDetails.java
+++ b/local-build-plugins/src/main/java/org/hibernate/build/OrmBuildDetails.java
@@ -6,6 +6,10 @@
import org.gradle.api.Project;
import org.gradle.api.provider.Provider;
+import org.gradle.api.tasks.Input;
+import org.gradle.api.tasks.InputFile;
+import org.gradle.api.tasks.Internal;
+import org.gradle.api.tasks.Nested;
import javax.inject.Inject;
import java.io.File;
@@ -39,43 +43,53 @@ public OrmBuildDetails(Project project) {
databaseName = (String) project.property( "db" );
}
+ @InputFile
public Provider getVersionFileAccess() {
return versionFileAccess;
}
- public HibernateVersion getHibernateVersion() {
- return hibernateVersion;
+ @Nested
+ public ReleaseDetails getReleaseDetails() {
+ return releaseDetails;
}
+ @Input
public String getHibernateVersionName() {
return getHibernateVersion().getFullName();
}
+ @Input
public String getHibernateVersionFamily() {
return getHibernateVersion().getFamily();
}
+ @Input
public String getHibernateVersionNameOsgi() {
return getHibernateVersion().getOsgiVersion();
}
- public ReleaseDetails getReleaseDetails() {
- return releaseDetails;
- }
-
- public JpaVersion getJpaVersion() {
- return jpaVersion;
- }
-
+ @Input
public String getJpaVersionName() {
return getJpaVersion().getName();
}
+ @Input
public String getJpaVersionNameOsgi() {
return getJpaVersion().getOsgiName();
}
+ @Input
public String getDatabaseName() {
return databaseName;
}
+
+ @Internal
+ public HibernateVersion getHibernateVersion() {
+ return hibernateVersion;
+ }
+
+ @Internal
+ public JpaVersion getJpaVersion() {
+ return jpaVersion;
+ }
}
diff --git a/local-build-plugins/src/main/java/org/hibernate/build/ReleaseDetails.java b/local-build-plugins/src/main/java/org/hibernate/build/ReleaseDetails.java
index bee4dcd5285c..e33bcfa1869a 100644
--- a/local-build-plugins/src/main/java/org/hibernate/build/ReleaseDetails.java
+++ b/local-build-plugins/src/main/java/org/hibernate/build/ReleaseDetails.java
@@ -6,6 +6,9 @@
import org.gradle.api.Project;
import org.gradle.api.provider.Provider;
+import org.gradle.api.tasks.Input;
+import org.gradle.api.tasks.Internal;
+import org.gradle.api.tasks.Optional;
/**
* @author Steve Ebersole
@@ -36,14 +39,17 @@ public ReleaseDetails(Project project) {
createTagAccess = project.provider( () -> !project.hasProperty( "noTag" ) );
}
+ @Internal
public HibernateVersion getReleaseVersion() {
return releaseVersion;
}
+ @Internal
public HibernateVersion getDevelopmentVersion() {
return developmentVersion;
}
+ @Input
public Provider getCreateTagAccess() {
return createTagAccess;
}
@@ -52,10 +58,13 @@ public boolean shouldCreateTag() {
return getCreateTagAccess().get();
}
+ @Input
+ @Optional
public Provider getTagNameAccess() {
return tagNameAccess;
}
+ @Internal
public String getTagNameToUse() {
return getTagNameAccess().get();
}
From 34a3f8d977e34375977ba06d34af9166d6186cdd Mon Sep 17 00:00:00 2001
From: Rey <89825425+Kingg22@users.noreply.github.com>
Date: Thu, 16 Oct 2025 22:38:15 -0500
Subject: [PATCH 08/12] HHH-19876 build(documentation): remove doFirst closure
and mark not compatible with CC asciidoctor tasks
Await stable release of v5 and enable all https://github.com/asciidoctor/asciidoctor-gradle-plugin/issues/756
---
documentation/documentation.gradle | 25 +++++++++++++------------
1 file changed, 13 insertions(+), 12 deletions(-)
diff --git a/documentation/documentation.gradle b/documentation/documentation.gradle
index 290a51f6ad5c..0a648f52b52a 100644
--- a/documentation/documentation.gradle
+++ b/documentation/documentation.gradle
@@ -2,12 +2,13 @@
* SPDX-License-Identifier: Apache-2.0
* Copyright Red Hat Inc. and Hibernate Authors
*/
-import java.util.function.Function
import org.asciidoctor.gradle.jvm.AsciidoctorTask
import org.asciidoctor.gradle.jvm.pdf.AsciidoctorPdfTask
import org.ysb33r.grolifant.api.core.jvm.ExecutionMode
+import java.util.function.Function
+
buildscript {
configurations.configureEach {
resolutionStrategy.dependencySubstitution {
@@ -714,16 +715,14 @@ settingsDocumentation {
def generateSettingsDocTask = tasks.named( "generateSettingsDoc" ) {
dependsOn aggregateJavadocsTask
- doFirst {
- def javadoc = aggregateJavadocsTask.get()
- def javaLanguageVersion = javadoc.javadocTool.present
- ? javadoc.javadocTool.get().metadata.languageVersion
- : JavaLanguageVersion.of( JavaVersion.current().name )
+ def javadoc = aggregateJavadocsTask.get()
+ def javaLanguageVersion = javadoc.javadocTool.present
+ ? javadoc.javadocTool.get().metadata.languageVersion
+ : JavaLanguageVersion.of( JavaVersion.current().name )
- if ( javaLanguageVersion.asInt() > 11 ) {
- println "Aggregated Javadocs was built using a JDK newer than version 11; generating the settings User Guide fragment will not succeed"
- }
- }
+ if ( javaLanguageVersion.asInt() > 11 ) {
+ println "Aggregated Javadocs was built using a JDK newer than version 11; generating the settings User Guide fragment will not succeed"
+ }
}
def renderUserGuideHtmlTask = tasks.register( 'renderUserGuideHtml', AsciidoctorTask ) { task ->
@@ -969,7 +968,8 @@ def buildDocsForPublishingTask = tasks.register( 'buildDocsForPublishing' ) { ta
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-tasks.withType(AsciidoctorTask).configureEach {
+tasks.withType( AsciidoctorTask ).configureEach {
+ notCompatibleWithConfigurationCache( "AsciiDoctor v4 is not compatible with CC yet, remove with stable release of v5" )
baseDirFollowsSourceDir()
outputOptions {
separateOutputDirs = false
@@ -981,7 +981,8 @@ tasks.withType(AsciidoctorTask).configureEach {
dependsOn 'unpackTheme'
}
-tasks.withType(AsciidoctorPdfTask).configureEach {
+tasks.withType( AsciidoctorPdfTask ).configureEach {
+ notCompatibleWithConfigurationCache( "AsciiDoctor v4 is not compatible with CC yet, remove with stable release of v5" )
// See https://docs.asciidoctor.org/gradle-plugin/latest/common-task-configuration/#choosing-an-execution-mode-for-asciidoctorj
executionMode = ExecutionMode.JAVA_EXEC
From 95bb7d00e58f3da4289bc0f74bd14d957446912b Mon Sep 17 00:00:00 2001
From: Rey <89825425+Kingg22@users.noreply.github.com>
Date: Thu, 16 Oct 2025 23:23:54 -0500
Subject: [PATCH 09/12] HHH-19876 build(local plugins): fix input and output
between index and jandexAwareTask
---
.../orm/post/AbstractJandexAwareTask.java | 2 +-
.../orm/post/ReportGenerationPlugin.java | 27 ++++++++-----------
2 files changed, 12 insertions(+), 17 deletions(-)
diff --git a/local-build-plugins/src/main/java/org/hibernate/orm/post/AbstractJandexAwareTask.java b/local-build-plugins/src/main/java/org/hibernate/orm/post/AbstractJandexAwareTask.java
index 25ee62d405aa..879adbf6d21c 100644
--- a/local-build-plugins/src/main/java/org/hibernate/orm/post/AbstractJandexAwareTask.java
+++ b/local-build-plugins/src/main/java/org/hibernate/orm/post/AbstractJandexAwareTask.java
@@ -50,7 +50,7 @@ public AbstractJandexAwareTask(ObjectFactory objects) {
@Internal
protected abstract Provider getTaskReportFileReference();
- @Nested
+ @Internal
protected abstract Property getIndexManager();
@Nested
diff --git a/local-build-plugins/src/main/java/org/hibernate/orm/post/ReportGenerationPlugin.java b/local-build-plugins/src/main/java/org/hibernate/orm/post/ReportGenerationPlugin.java
index c96d272d33a2..c5e3e45d8008 100644
--- a/local-build-plugins/src/main/java/org/hibernate/orm/post/ReportGenerationPlugin.java
+++ b/local-build-plugins/src/main/java/org/hibernate/orm/post/ReportGenerationPlugin.java
@@ -27,41 +27,38 @@ public void apply(Project project) {
final var indexManager = project.getExtensions().create( "indexManager", IndexManager.class );
indexManager.getArtifactsToProcess().from( artifactsToProcess );
+ final var indexerTask = project.getTasks().register(
+ "buildAggregatedIndex",
+ IndexerTask.class,
+ task -> task.getIndexManager().set( indexManager )
+ );
+
final var details = project.getExtensions().getByType( OrmBuildDetails.class );
project.getTasks().withType( AbstractJandexAwareTask.class )
.configureEach(task -> {
task.getOrmBuildDetails().set( details );
task.getIndexManager().set( indexManager );
+ task.dependsOn( indexerTask );
});
- final var indexerTask = project.getTasks().register(
- "buildAggregatedIndex",
- IndexerTask.class,
- task -> task.getIndexManager().set( indexManager )
- );
-
final var incubatingTask = project.getTasks().register(
"generateIncubationReport",
- IncubationReportTask.class,
- (task) -> task.dependsOn( indexerTask )
+ IncubationReportTask.class
);
final var deprecationTask = project.getTasks().register(
"generateDeprecationReport",
- DeprecationReportTask.class,
- (task) -> task.dependsOn( indexerTask )
+ DeprecationReportTask.class
);
final var internalsTask = project.getTasks().register(
"generateInternalsReport",
- InternalsReportTask.class,
- (task) -> task.dependsOn( indexerTask )
+ InternalsReportTask.class
);
final var loggingTask = project.getTasks().register(
"generateLoggingReport",
- LoggingReportTask.class,
- (task) -> task.dependsOn( indexerTask )
+ LoggingReportTask.class
);
final var dialectConfig = project.getConfigurations()
@@ -71,7 +68,6 @@ public void apply(Project project) {
"generateDialectTableReport",
DialectReportTask.class,
(task) -> {
- task.dependsOn( indexerTask );
task.getDialectReportSources().from( dialectConfig );
task.getSourcePackage().set( "org.hibernate.dialect" );
task.getReportFile().set( project.getLayout().getBuildDirectory().file( "orm/generated/dialect/dialect-table.adoc" ) );
@@ -85,7 +81,6 @@ public void apply(Project project) {
"generateCommunityDialectTableReport",
DialectReportTask.class,
(task) -> {
- task.dependsOn( indexerTask );
task.getDialectReportSources().from( communityDialectConfig );
task.getSourcePackage().set( "org.hibernate.community.dialect" );
task.getReportFile().set( project.getLayout().getBuildDirectory().file( "orm/generated/dialect/dialect-table-community.adoc" ) );
From d5a4527934917894f8afb585a0e08756948170d2 Mon Sep 17 00:00:00 2001
From: Rey <89825425+Kingg22@users.noreply.github.com>
Date: Thu, 16 Oct 2025 23:24:36 -0500
Subject: [PATCH 10/12] HHH-19876 build(local plugins): fix missing set of
property OrmBuildDetails on settings property
---
.../orm/properties/SettingsDocumentationPlugin.java | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/local-build-plugins/src/main/java/org/hibernate/orm/properties/SettingsDocumentationPlugin.java b/local-build-plugins/src/main/java/org/hibernate/orm/properties/SettingsDocumentationPlugin.java
index 9fde8ba6edc6..b820a22f6a4d 100644
--- a/local-build-plugins/src/main/java/org/hibernate/orm/properties/SettingsDocumentationPlugin.java
+++ b/local-build-plugins/src/main/java/org/hibernate/orm/properties/SettingsDocumentationPlugin.java
@@ -6,6 +6,8 @@
import org.gradle.api.Plugin;
import org.gradle.api.Project;
+import org.gradle.api.tasks.TaskProvider;
+import org.hibernate.build.OrmBuildDetails;
import org.hibernate.build.aspects.ModuleAspect;
import static org.hibernate.orm.properties.SettingsDocExtension.EXTENSION_NAME;
@@ -32,6 +34,9 @@ public void apply(Project project) {
dslExtension.getOutputFile().convention( project.getLayout().getBuildDirectory().file( "asciidoc/fragments/config-settings.adoc" ) );
// create the generation task
- project.getTasks().register( TASK_NAME, SettingsDocGenerationTask.class, dslExtension );
+ final OrmBuildDetails details = project.getExtensions().getByType( OrmBuildDetails.class );
+ final TaskProvider settingsDocGenerationTask = project.getTasks()
+ .register( TASK_NAME, SettingsDocGenerationTask.class, dslExtension );
+ settingsDocGenerationTask.configure( task -> task.getOrmBuildDetails().set( details ) );
}
}
From 3469280b77128ebdc309924f606fa04e7f4d957e Mon Sep 17 00:00:00 2001
From: Rey <89825425+Kingg22@users.noreply.github.com>
Date: Thu, 16 Oct 2025 18:07:35 -0500
Subject: [PATCH 11/12] HHH-19876 build(local plugins): remove jakarta of
register after HHH-19873 and use explicit function
After https://github.com/hibernate/hibernate-orm/pull/11077 2 warnings are present with missing implementation class for these plugins
---
local-build-plugins/build.gradle | 24 ++++++++----------------
1 file changed, 8 insertions(+), 16 deletions(-)
diff --git a/local-build-plugins/build.gradle b/local-build-plugins/build.gradle
index 2afd5a17741a..74b772b46487 100644
--- a/local-build-plugins/build.gradle
+++ b/local-build-plugins/build.gradle
@@ -49,43 +49,35 @@ tasks.compileJava {
gradlePlugin {
plugins {
- databaseServicePlugin {
+ register( "databaseServicePlugin" ) {
id = 'org.hibernate.orm.database-service'
implementationClass = 'org.hibernate.orm.db.DatabaseServicePlugin'
}
- antlrPlugin {
+ register( "antlrPlugin" ) {
id = 'org.hibernate.orm.antlr'
implementationClass = 'org.hibernate.orm.antlr.AntlrPlugin'
}
- jakartaPlugin {
- id = 'org.hibernate.orm.jakarta'
- implementationClass = 'org.hibernate.orm.jakarta.JakartaPlugin'
- }
- jakartaPublishPlugin {
- id = 'org.hibernate.orm.jakarta-publish'
- implementationClass = 'org.hibernate.orm.jakarta.JakartaPublishingPlugin'
- }
- reportsPlugin {
+ register( "reportsPlugin" ) {
id = 'org.hibernate.orm.build.reports'
implementationClass = 'org.hibernate.orm.post.ReportGenerationPlugin'
}
- envSettings {
+ register( "envSettings" ) {
id = 'org.hibernate.orm.build.env-settings'
implementationClass = 'org.hibernate.orm.env.EnvironmentSettingsPlugin'
}
- jdkVersionSettings {
+ register( "jdkVersionSettings" ) {
id = 'org.hibernate.orm.build.jdks-settings'
implementationClass = 'org.hibernate.orm.toolchains.JdkVersionSettingsPlugin'
}
- settingsDocumentationPlugin {
+ register( "settingsDocumentationPlugin" ) {
id = 'org.hibernate.orm.build.settings-doc'
implementationClass = 'org.hibernate.orm.properties.SettingsDocumentationPlugin'
}
- jdkVersionsPlugin {
+ register( "jdkVersionsPlugin" ) {
id = 'org.hibernate.orm.build.jdks'
implementationClass = 'org.hibernate.orm.toolchains.JdkVersionPlugin'
}
- javaModulePlugin {
+ register( "javaModulePlugin" ) {
id = 'org.hibernate.orm.build.java-module'
implementationClass = 'org.hibernate.orm.toolchains.JavaModulePlugin'
}
From b0811383d5b57b0113d85b838ac53990e019ae7f Mon Sep 17 00:00:00 2001
From: Rey <89825425+Kingg22@users.noreply.github.com>
Date: Thu, 16 Oct 2025 18:30:48 -0500
Subject: [PATCH 12/12] HHH-19876 build(gradle): enable configuration cache and
configure on demand in gradle properties
---
gradle.properties | 2 ++
1 file changed, 2 insertions(+)
diff --git a/gradle.properties b/gradle.properties
index 2ff3f882adb8..adefe24b4ebb 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -13,6 +13,8 @@ org.gradle.parallel=true
# enable Gradle's Task Cache. worst case:
# > rm -rf ~/.gradle/caches/build-cache-1
org.gradle.caching=true
+org.gradle.configuration-cache=true
+org.gradle.configureondemand=true
# JDK auto-detection is not quite ready yet in Gradle 6.7.
# On Fedora in particular, if you have the package java-1.8.0-openjdk-headless-1.8.0.265.b01-1.fc32.x86_64 installed,