hibernate-orm/tooling/hibernate-gradle-plugin
Tomas Cerskus 07529c309d HHH-15707 - Fix Gradle plugin with Kotlin 1.7.0 or higher
Since Kotlin version 1.7.0 the KotlinCompile task no longer extends
Gradle's AbstractCompile.

This commit updates Hibernate Gradle enhancement plugin to not cast to
AbstractCompile and instead use reflection to invoke the
"getDestinationDirectory" method.

It also updates the Kotlin version on used to test the Gradle
enhancement (but remains backwards compatible with previous Kotlin
versions).
2023-02-06 18:00:12 +01:00
..
src HHH-15707 - Fix Gradle plugin with Kotlin 1.7.0 or higher 2023-02-06 18:00:12 +01:00
.gitignore Include a new .gitignore file for tooling/hibernate-gradle-plugin as it's generated by Eclipse 2015-03-10 12:47:55 -04:00
README.adoc HHH-15314 - Hibernate Gradle plugin is not working for Kotlin projects 2022-06-08 17:32:52 -05:00
hibernate-gradle-plugin.gradle HHH-15765 Get rid of the credentials plugin 2022-11-28 08:29:56 +01:00

README.adoc

= Hibernate ORM Gradle Plugin

A Gradle plugin for introducing Hibernate tasks and capabilities into a build.


== Set up

[source,groovy]
----
plugins {
  id 'org.hibernate.orm'
}

// HibernateOrmSpec
hibernate {
    ...
}
----


== DSL

The `hibernate` DSL extension is the main entry into configuring the plugin

[source,groovy]
----
hibernate {
}
----

It defines configuration options:

useSameVersion:: Specifies whether to have the plugin inject an `implementation` dependency on `hibernate-core`, implicitly using
    the same version as the plugin.  The default is true.  If you'd prefer to use a different version, set this to false and define
    the dependency on `hibernate-core` as you normally would.
sourceSet:: The source-set containing the project's domain model.  Only one source-set is supported, although all languages (Java, Kotlin, etc)
    within that source-set are considered.

It additionally defines 3 nested DSL extensions related to:

* <<enhance>>
* <<jpa-metamodel>>
* <<hbm-xml>>


[[enhance]]
== Bytecode Enhancement

The plugin can perform build-time enhancement of the domain classes.  This is controlled
by the `enhancement` portion of the `hibernate` DSL extension.

To enable enhancement, reference the DSL extension:

[source,groovy]
----
hibernate {
    enhancement
}
----

Enhancement has a few options to control what enhancements take place.  All the options default to `false`:

[source,groovy]
----
hibernate {
  enhancement {
    lazyInitialization = true
    dirtyTracking = true
    associationManagement = true
    extendedEnhancement = false
  }
}
----


[[jpa-metamodel]]
== JPA Static Metamodel generation

The plugin can also generate the JPA static metamodel classes based on the application's domain model.  To enable
the generation, simply refer to the DSL extension:

[source,groovy]
----
hibernate {
    jpaMetamodel
}
----

The generation accepts a number of options:

[source,groovy]
----
hibernate {
    jpaMetamodel {
        // directory where the generated metamodel source files should be written
        //      - defaults to `${buildDir}/generated/sources/jpaMetamodel
        generationOutputDirectory = "some/other/dir"

        // directory where the compiled generated metamodel classes should be written
        //      - defaults to `${buildDir}/classes/java/jpaMetamodel
        compileOutputDirectory = "special/classes/dir"

        // should the `jakarta.annotation.Generated` annotation be applied?
        //      - defaults to true
        applyGeneratedAnnotation = true

        // error suppressions to be added to the generated source files
        //      - default is ["raw", "deprecation"]
        suppressions = ...
    }
}
----


[[hbm-xml]]
== Legacy `hbm.xml` Transformation

Coming soon...