2018-01-10 16:06:58 -05:00
/ *
* Hibernate , Relational Persistence for Idiomatic Java
*
* License: GNU Lesser General Public License ( LGPL ) , version 2.1 or later
* See the lgpl . txt file in the root directory or http: //www.gnu.org/licenses/lgpl-2.1.html
* /
2018-05-12 21:29:50 -04:00
2018-01-10 16:06:58 -05:00
/ * *
* Support for modules that contain Java code
* /
2018-05-12 21:29:50 -04:00
buildscript {
repositories {
mavenCentral ( )
}
dependencies {
2022-03-15 13:15:56 -04:00
classpath 'de.thetaphi:forbiddenapis:3.2'
2018-05-12 21:29:50 -04:00
}
}
import de.thetaphi.forbiddenapis.gradle.CheckForbiddenApis
2019-05-21 17:29:57 -04:00
import org.apache.tools.ant.filters.ReplaceTokens
2022-03-15 10:39:07 -04:00
apply from: rootProject . file ( 'gradle/module.gradle' )
2018-01-10 16:06:58 -05:00
apply from: rootProject . file ( 'gradle/libraries.gradle' )
apply from: rootProject . file ( 'gradle/databases.gradle' )
2022-03-15 10:39:07 -04:00
apply plugin: 'org.hibernate.orm.database-service'
2021-05-14 15:59:59 -04:00
apply plugin: 'java-library'
2022-10-24 05:00:44 -04:00
apply plugin: 'biz.aQute.bnd.builder'
2021-06-26 09:46:09 -04:00
apply plugin: 'org.hibernate.orm.database-service'
2018-01-10 16:06:58 -05:00
2023-04-05 07:59:39 -04:00
apply plugin: 'org.checkerframework'
2018-01-10 16:06:58 -05:00
apply plugin: 'checkstyle'
apply plugin: 'build-dashboard'
apply plugin: 'project-report'
2021-05-14 15:59:59 -04:00
2020-04-16 06:03:49 -04:00
// Attempt to leverage JetBrain's Gradle extension to automatically define
2019-05-21 17:29:57 -04:00
// `copyResourcesToIntelliJOutFolder` as a "build trigger" on import.
//
// However, see https://github.com/JetBrains/gradle-idea-ext-plugin/issues/8
apply plugin: 'org.jetbrains.gradle.plugin.idea-ext'
2018-01-10 16:06:58 -05:00
ext {
java9ModuleNameBase = project . name . startsWith ( 'hibernate-' ) ? name . drop ( 'hibernate-' . length ( ) ) : name
2022-05-24 05:53:26 -04:00
java9ModuleName = "org.hibernate.orm.$project.java9ModuleNameBase" . replace ( '-' , '.' )
2018-10-15 05:56:27 -04:00
forbiddenAPITargetJDKCompatibility = '11'
2018-01-10 16:06:58 -05:00
}
2020-04-06 13:21:11 -04:00
if ( ! project . description ) {
project . description = "The Hibernate ORM $project.name module"
2018-01-10 16:06:58 -05:00
}
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Configurations and Dependencies
2022-04-22 19:40:06 -04:00
2018-01-10 16:06:58 -05:00
dependencies {
2022-04-22 19:40:06 -04:00
implementation libs . logging
2019-05-21 17:29:57 -04:00
2022-04-22 19:40:06 -04:00
compileOnly libs . loggingAnnotations
2022-11-24 07:41:59 -05:00
// Used for compiling some Oracle specific JdbcTypes
compileOnly dbLibs . oracle
2019-05-21 17:29:57 -04:00
// JUnit dependencies made up of:
// * JUnit 5
// * the Jupiter engine which runs JUnit 5 based tests
// * the "vintage" engine - which runs JUnit 3 and 4 based tests
2022-04-22 19:40:06 -04:00
testImplementation testLibs . junit5Api
testImplementation testLibs . junit5Engine
testImplementation testLibs . junit5Params
testImplementation testLibs . junit4
testImplementation testLibs . junit4Engine
testImplementation testLibs . assertjCore
2019-05-21 17:29:57 -04:00
2022-04-22 19:40:06 -04:00
testImplementation testLibs . byteman
2018-01-10 16:06:58 -05:00
2022-04-22 19:40:06 -04:00
testRuntimeOnly testLibs . log4j2
testRuntimeOnly libs . byteBuddy
2018-01-10 16:06:58 -05:00
//Databases
2022-04-22 19:40:06 -04:00
testRuntimeOnly dbLibs . h2
testRuntimeOnly dbLibs . derby
testRuntimeOnly dbLibs . hsqldb
testRuntimeOnly dbLibs . postgresql
testRuntimeOnly dbLibs . mssql
testRuntimeOnly dbLibs . informix
testRuntimeOnly dbLibs . cockroachdb
testRuntimeOnly dbLibs . oracle
2022-05-03 09:22:56 -04:00
testRuntimeOnly dbLibs . oracleXml
testRuntimeOnly dbLibs . oracleXmlParser
2022-04-22 19:40:06 -04:00
testRuntimeOnly dbLibs . sybase
2023-04-24 15:35:51 -04:00
testRuntimeOnly rootProject . fileTree ( dir: 'drivers' , include: '*.jar' )
2021-02-03 04:55:07 -05:00
// Since both the DB2 driver and HANA have a package "net.jpountz" we have to add dependencies conditionally
// This is due to the "no split-packages" requirement of Java 9+
if ( db . startsWith ( 'db2' ) ) {
2022-04-22 19:40:06 -04:00
testRuntimeOnly dbLibs . db2
2018-01-10 16:06:58 -05:00
}
2021-02-03 04:55:07 -05:00
else if ( db . startsWith ( 'hana' ) ) {
2022-04-22 19:40:06 -04:00
testRuntimeOnly dbLibs . hana
2018-01-10 16:06:58 -05:00
}
2022-04-06 12:52:56 -04:00
else if ( db . startsWith ( 'mysql' ) | | db . startsWith ( 'tidb' ) ) {
2022-04-22 19:40:06 -04:00
testRuntimeOnly dbLibs . mysql
2022-04-06 12:52:56 -04:00
}
else if ( db . startsWith ( 'mariadb' ) ) {
2022-04-22 19:40:06 -04:00
testRuntimeOnly dbLibs . mariadb
2022-04-06 12:52:56 -04:00
}
2022-12-05 06:29:48 -05:00
else if ( db . startsWith ( 'firebird' ) ) {
testRuntimeOnly dbLibs . firebird
}
2018-01-10 16:06:58 -05:00
2022-04-22 19:40:06 -04:00
annotationProcessor libs . loggingProcessor
annotationProcessor libs . logging
annotationProcessor libs . loggingAnnotations
2022-01-11 16:47:13 -05:00
constraints {
implementation ( 'org.apache.logging.log4j:log4j-core' ) {
version {
2022-01-12 09:37:16 -05:00
strictly ( '[2.17.1, 3[' )
prefer ( '2.17.1' )
2022-01-11 16:47:13 -05:00
}
2022-01-12 09:37:16 -05:00
because ( 'CVE-2021-44228, CVE-2021-45046, CVE-2021-45105, CVE-2021-44832: Log4j vulnerable to remote code execution and other critical security vulnerabilities' )
2022-01-11 16:47:13 -05:00
}
}
2018-01-10 16:06:58 -05:00
}
2022-03-15 21:10:17 -04:00
configurations {
javadocSources {
canBeConsumed = true
canBeResolved = false
visible = false
description = 'Configuration for accessing the sources that should be included in the javadoc for the project'
}
}
artifacts {
sourceSets . main . allJava . srcDirs . each { srcDir - >
javadocSources srcDir
}
}
2018-01-10 16:06:58 -05:00
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Compilation
2019-10-21 05:02:11 -04:00
tasks . withType ( JavaCompile ) {
2018-01-10 16:06:58 -05:00
options . encoding = 'UTF-8'
2022-03-15 13:15:56 -04:00
options . warnings false
// javaCompileTask.options.compilerArgs += [
// "-nowarn",
// "-encoding", "UTF-8"
// ]
2019-10-21 05:02:11 -04:00
}
2020-11-09 04:13:34 -05:00
if ( ! gradle . ext . javaToolchainEnabled ) {
tasks . compileJava . configure {
sourceCompatibility = JavaVersion . toVersion ( gradle . ext . javaVersions . main . release )
targetCompatibility = JavaVersion . toVersion ( gradle . ext . javaVersions . main . release )
}
tasks . compileTestJava . configure {
sourceCompatibility = JavaVersion . toVersion ( gradle . ext . javaVersions . test . release )
targetCompatibility = JavaVersion . toVersion ( gradle . ext . javaVersions . test . release )
}
}
else {
// Configure generated bytecode
// "sourceCompatibility" is not supported with toolchains. We have to work around that limitation.
tasks . compileJava . configure {
2021-11-26 11:24:34 -05:00
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" ] )
2020-11-09 04:13:34 -05:00
}
tasks . compileTestJava . configure {
2021-11-26 11:24:34 -05:00
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" ] )
2020-11-09 04:13:34 -05:00
}
2019-10-21 05:02:11 -04:00
2020-11-09 04:13:34 -05:00
// Configure version of Java tools
java {
toolchain {
languageVersion = gradle . ext . javaVersions . main . compiler
}
}
2019-10-21 05:02:11 -04:00
tasks . compileTestJava {
2020-11-09 04:13:34 -05:00
javaCompiler = javaToolchains . compilerFor {
languageVersion = gradle . ext . javaVersions . test . compiler
}
}
2020-11-09 06:09:02 -05:00
// Configure JVM Options
2020-11-09 04:13:34 -05:00
// Display version of Java tools
tasks . withType ( JavaCompile ) . configureEach {
2022-03-15 13:15:56 -04:00
options . forkOptions . jvmArgs . addAll ( getProperty ( 'toolchain.compiler.jvmargs' ) . toString ( ) . split ( ' ' ) )
2020-11-09 04:13:34 -05:00
doFirst {
logger . lifecycle "Compiling with '${javaCompiler.get().metadata.installationPath}'"
}
}
tasks . withType ( Javadoc ) . configureEach {
2022-03-15 13:15:56 -04:00
options . setJFlags ( getProperty ( 'toolchain.javadoc.jvmargs' ) . toString ( ) . split ( ' ' ) . toList ( ) . findAll ( { ! it . isEmpty ( ) } ) )
2020-11-09 04:13:34 -05:00
doFirst {
logger . lifecycle "Generating javadoc with '${javadocTool.get().metadata.installationPath}'"
}
2019-10-21 05:02:11 -04:00
}
2018-01-10 16:06:58 -05:00
}
2022-04-22 19:40:06 -04:00
2018-01-10 16:06:58 -05:00
task compile ( dependsOn: [ compileJava , processResources , compileTestJava , processTestResources ] )
2021-08-02 17:35:16 -04:00
2018-01-10 16:06:58 -05:00
2021-09-29 12:50:55 -04:00
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Attach tools JAR to the classpath for byteman tests
final File toolsJar = file ( "${System.getProperty('java.home')}/../lib/tools.jar" )
if ( toolsJar . exists ( ) ) {
dependencies {
2021-10-13 04:24:56 -04:00
testImplementation files ( toolsJar )
2021-09-29 12:50:55 -04:00
}
}
2018-01-10 16:06:58 -05:00
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Testing
2020-11-09 04:13:34 -05:00
if ( gradle . ext . javaToolchainEnabled ) {
tasks . test {
// Configure version of Java tools
javaLauncher = javaToolchains . launcherFor {
languageVersion = gradle . ext . javaVersions . test . launcher
}
2020-11-09 06:09:02 -05:00
// Configure JVM Options
2020-12-14 06:10:10 -05:00
jvmArgs ( getProperty ( 'toolchain.launcher.jvmargs' ) . toString ( ) . split ( ' ' ) )
2022-06-09 08:46:09 -04:00
if ( project . hasProperty ( 'test.jdk.launcher.args' ) ) {
jvmArgs ( project . getProperty ( 'test.jdk.launcher.args' ) . toString ( ) . split ( ' ' ) )
}
2020-11-09 06:09:02 -05:00
2020-11-09 04:13:34 -05:00
// Display version of Java tools
doFirst {
logger . lifecycle "Testing with '${javaLauncher.get().metadata.installationPath}'"
}
}
}
2021-08-26 12:36:51 -04:00
class HeapDumpPathProvider implements CommandLineArgumentProvider {
2021-09-23 16:01:29 -04:00
@OutputDirectory
Provider < Directory > path
2021-08-26 12:36:51 -04:00
@Override
Iterable < String > asArguments ( ) {
[ "-XX:HeapDumpPath=${path.get().asFile.absolutePath}" ]
}
}
2020-11-09 04:13:34 -05:00
2019-05-21 17:29:57 -04:00
tasks . withType ( Test . class ) . each { test - >
test . useJUnitPlatform ( )
2021-06-26 09:46:09 -04:00
test . usesService ( project . gradle . sharedServices . registrations . getByName ( 'databaseService' ) . service )
2021-11-26 11:24:34 -05:00
// Byteman needs this property to be set, https://developer.jboss.org/thread/274997
test . jvmArgs + = [ "-Djdk.attach.allowAttachSelf=true" ]
2021-08-26 12:36:51 -04:00
test . jvmArgumentProviders . add (
2021-09-23 16:01:29 -04:00
new HeapDumpPathProvider ( path: project . layout . buildDirectory . dir ( "OOM-dump" ) )
2021-08-26 12:36:51 -04:00
)
2019-05-21 17:29:57 -04:00
test . jvmArgs + = [
2018-01-10 16:06:58 -05:00
'-XX:+HeapDumpOnOutOfMemoryError' ,
2020-10-25 17:57:55 -04:00
'-XX:MetaspaceSize=256M'
2018-01-10 16:06:58 -05:00
]
2020-10-27 10:24:37 -04:00
test . maxHeapSize = '3G'
2018-01-10 16:06:58 -05:00
2019-05-21 17:29:57 -04:00
test . systemProperties [ 'hibernate.test.validatefailureexpected' ] = true
2023-05-10 17:59:46 -04:00
test . systemProperties [ 'hibernate.highlight_sql' ] = false
2019-05-21 17:29:57 -04:00
test . systemProperties + = System . properties . findAll { it . key . startsWith ( "hibernate." ) }
test . enableAssertions = true
2020-04-16 06:03:49 -04:00
2019-05-21 17:29:57 -04:00
if ( project . name ! = 'hibernate-testing' ) {
test . dependsOn ':hibernate-testing:test'
}
2022-09-19 08:51:06 -04:00
// Allow to exclude specific tests
if ( project . hasProperty ( 'excludeTests' ) ) {
test . filter {
excludeTestsMatching project . property ( 'excludeTests' ) . toString ( )
}
}
2018-01-10 16:06:58 -05:00
}
2019-05-21 17:29:57 -04:00
sourceSets {
test {
resources {
// add `src/test/java` as a test-resources dir
configure ( srcDir ( 'src/test/java' ) ) {
filter {
include '**/*.properties'
include '**/*.xml'
}
}
configure ( srcDir ( 'src/test/resources' ) ) {
filter {
include '*.properties'
include '*.xml'
include '**/*.properties'
include '**/*.xml'
}
2018-01-10 16:06:58 -05:00
}
}
}
}
2019-05-21 17:29:57 -04:00
processTestResources {
2021-10-13 04:24:56 -04:00
duplicatesStrategy DuplicatesStrategy . INCLUDE
2019-05-21 17:29:57 -04:00
inputs . property ( "db" , db )
2022-10-19 13:25:16 -04:00
inputs . property ( "dbHost" , dbHost )
2021-09-29 12:50:55 -04:00
doLast {
copy {
from ( sourceSets . test . java . srcDirs ) {
include '**/*.properties'
include '**/*.xml'
}
2021-12-01 12:50:10 -05:00
into sourceSets . test . java . classesDirectory
2021-09-29 12:50:55 -04:00
}
copy {
from file ( 'src/test/resources' )
into file ( "${buildDir}/resources/test" )
exclude 'src/test/resources/hibernate.properties'
}
copy {
from file ( 'src/test/resources/hibernate.properties' )
into file ( "${buildDir}/resources/test" )
filter ( ReplaceTokens , tokens: dbBundle [ db ] )
}
}
2019-02-18 09:14:24 -05:00
}
2020-05-27 12:22:54 -04:00
// Keep system properties in sync with gradle.properties!
test {
systemProperty 'user.language' , 'en'
systemProperty 'user.country' , 'US'
systemProperty 'user.timezone' , 'UTC'
systemProperty 'file.encoding' , 'UTF-8'
2021-02-09 07:03:18 -05:00
// Needed for AdoptOpenJDK on alpine? The problem is similar to this: https://github.com/mockito/mockito/issues/978
jvmArgs '-XX:+StartAttachListener'
2020-05-27 12:22:54 -04:00
}
2023-08-31 09:21:01 -04:00
// Enable the experimental features of ByteBuddy with JDK 22+
2020-04-14 09:21:33 -04:00
test {
2022-03-04 03:22:56 -05:00
// We need to test the *launcher* version,
// because some tests will use Mockito (and thus Bytebuddy) to mock/spy
// classes that are part of the JDK,
// and those classes always have bytecode matching the version of the launcher.
2023-08-31 09:21:01 -04:00
// So for example, when using a JDK22 launcher and compiling tests with --release 21,
// Bytebuddy will still encounter classes with Java 22 bytecode.
if ( gradle . ext . javaVersions . test . launcher . asInt ( ) > = 22 ) {
2020-11-09 04:13:34 -05:00
logger . warn ( "The version of Java bytecode that will be tested is not supported by Bytebuddy by default. " +
2020-04-14 09:21:33 -04:00
" Setting 'net.bytebuddy.experimental=true'." )
systemProperty 'net.bytebuddy.experimental' , true
}
}
2019-05-27 07:02:38 -04:00
test {
2019-06-13 02:44:53 -04:00
if ( project . findProperty ( 'log-test-progress' ) ? . toString ( ) ? . toBoolean ( ) ) {
// Log a statement for each test.
// Used in the Travis build so that Travis doesn't end up panicking because there's no output for a long time.
testLogging {
events "passed" , "skipped" , "failed"
2023-05-08 05:29:32 -04:00
exceptionFormat = 'full'
2019-06-13 02:44:53 -04:00
}
2019-05-27 07:02:38 -04:00
}
}
2021-05-18 17:03:34 -04:00
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Jar
jar {
manifest {
attributes (
// Basic JAR manifest attributes
'Specification-Title' : project . name ,
'Specification-Version' : project . version ,
'Specification-Vendor' : 'Hibernate.org' ,
'Implementation-Title' : project . name ,
'Implementation-Version' : project . version ,
'Implementation-Vendor' : 'Hibernate.org' ,
'Implementation-Vendor-Id' : 'org.hibernate' ,
2021-06-07 06:47:53 -04:00
'Implementation-Url' : 'https://hibernate.org/orm' ,
2021-05-18 17:03:34 -04:00
// Java 9 module name
'Automatic-Module-Name' : project . java9ModuleName ,
// Hibernate-specific JAR manifest attributes
'Hibernate-VersionFamily' : project . ormVersion . family ,
'Hibernate-JpaVersion' : project . jpaVersion . name ,
// BND Plugin instructions (for OSGi):
2021-07-26 14:51:22 -04:00
'-reproducible' : true ,
'-noextraheaders' : true ,
2021-05-18 17:03:34 -04:00
'Bundle-Name' : project . name ,
'Bundle-SymbolicName' : project . java9ModuleName ,
'Bundle-Vendor' : 'Hibernate.org' ,
2021-06-07 06:47:53 -04:00
'Bundle-DocURL' : "https://www.hibernate.org/orm/${project.ormVersion.family}" ,
2021-05-18 17:03:34 -04:00
// This is overridden in some sub-projects
'Import-Package' : [
// Temporarily support JTA 1.1 -- Karaf and other frameworks still
// use it. Without this, the plugin generates [1.2,2).
'javax.transaction;version="[1.1,2)"' ,
// Also import every package referenced in the code
// (note that '*' is resolved at build time to a list of packages)
'*'
] . join ( ',' ) ,
'-exportcontents' : "*;version=${project.version}"
)
}
}
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// sources
task sourcesJar ( type: Jar ) {
from project . sourceSets . main . allSource
manifest {
attributes (
// Basic JAR manifest attributes
'Specification-Title' : project . name ,
'Specification-Version' : project . version ,
'Specification-Vendor' : 'Hibernate.org' ,
'Implementation-Title' : project . name ,
'Implementation-Version' : project . version ,
'Implementation-Vendor' : 'Hibernate.org' ,
'Implementation-Vendor-Id' : 'org.hibernate' ,
2021-06-07 06:47:53 -04:00
'Implementation-Url' : 'https://hibernate.org/orm' ,
2021-05-18 17:03:34 -04:00
// Hibernate-specific JAR manifest attributes
'Hibernate-VersionFamily' : project . ormVersion . family ,
'Hibernate-JpaVersion' : project . jpaVersion . name
)
}
archiveClassifier . set ( 'sources' )
}
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Javadoc
apply from: rootProject . file ( 'gradle/javadoc.gradle' )
2018-01-10 16:06:58 -05:00
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// IDE
/ *
2021-06-26 09:46:09 -04:00
The latest versions of IntelliJ copy the test resources into out /test/ resources and
use those for its test classpath . Unfortunately , this occurs before the placeholder
in the test config file are substituted with the testing values .
2018-01-10 16:06:58 -05:00
This behaviour prevents the execution of the hibernate tests from inside the IDE .
A solution is to enable the 'After Build' Execution of the copyResourcesToIntelliJOutFolder task
from the 'Gradle project' IntelliJ tool window ( The task can be found under hibernate - orm > Task > other )
* /
2019-05-21 17:29:57 -04:00
task copyResourcesToIntelliJOutFolder ( type: Task , dependsOn: project . tasks . processTestResources ) {
2018-01-10 16:06:58 -05:00
doLast {
copy {
from "$buildDir/resources/test"
into 'out/test/resources'
}
}
}
2021-06-26 09:46:09 -04:00
2018-01-10 16:06:58 -05:00
2018-06-01 01:56:13 -04:00
/ *
Use this task to set the current DB in a given module .
> gradlew sDB - Pdb = mysql
Afterward , you can run any test from the IDE against that particular DB .
* /
2020-09-01 05:31:22 -04:00
task setDataBase dependsOn ( processTestResources , copyResourcesToIntelliJOutFolder ) {
2022-03-15 21:10:17 -04:00
println ( "Setting current database to ${db}" )
2018-06-01 01:56:13 -04:00
}
2018-01-10 16:06:58 -05:00
2022-03-15 21:10:17 -04:00
tasks . copyResourcesToIntelliJOutFolder . mustRunAfter processTestResources
2020-09-01 05:31:22 -04:00
2018-01-10 16:06:58 -05:00
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Report configs
checkstyle {
2022-03-15 21:10:17 -04:00
it . sourceSets = [ project . sourceSets . main ]
2018-01-10 16:06:58 -05:00
configFile = rootProject . file ( 'shared/config/checkstyle/checkstyle.xml' )
showViolations = false
}
2022-03-15 21:10:17 -04:00
2018-01-10 16:06:58 -05:00
// exclude generated java sources - by explicitly setting the base source dir
2022-03-15 21:10:17 -04:00
tasks . checkstyleMain . source = 'src/main/java'
2023-04-05 07:59:39 -04:00
tasks . checkstyleMain
. exclude ( 'org/hibernate/jpamodelgen/util/NullnessUtil.java' )
. exclude ( 'org/hibernate/internal/util/NullnessUtil.java' )
2018-01-10 16:06:58 -05:00
// define a second checkstyle task for checking non-fatal violations
task nonFatalCheckstyle ( type: Checkstyle ) {
source = project . sourceSets . main . java
classpath = project . configurations . checkstyle
showViolations = false
configFile = rootProject . file ( 'shared/config/checkstyle/checkstyle-non-fatal.xml' )
}
2023-04-05 07:59:39 -04:00
checkerFramework {
checkers = [
'org.checkerframework.checker.nullness.NullnessChecker'
]
extraJavacArgs = [
'-AsuppressWarnings=initialization' ,
"-Astubs=${project.rootDir}/checkerstubs" ,
2023-04-26 12:27:28 -04:00
'-AonlyDefs=^org\\.hibernate\\.(jpamodelgen|spi|pretty|(action|context|bytecode)\\.spi)\\.'
2023-04-05 07:59:39 -04:00
]
}
2020-04-16 06:46:19 -04:00
task forbiddenApisSystemOut ( type: CheckForbiddenApis , dependsOn: compileJava ) {
bundledSignatures + = 'jdk-system-out'
suppressAnnotations + = [ 'org.hibernate.internal.build.AllowSysOut' , 'org.hibernate.internal.build.AllowPrintStacktrace' ]
}
task forbiddenApisUnsafe ( type: CheckForbiddenApis , dependsOn: compileJava ) {
2020-11-09 04:13:34 -05:00
bundledSignatures + = "jdk-unsafe-${gradle.ext.baselineJavaVersion}" . toString ( )
2020-04-16 06:46:19 -04:00
// unfortunately we currently have many uses of default Locale implicitly (~370) which need to be fixed
// before we can fully enabled this check
//
// No idea how findbugs was missing these b4
ignoreFailures = true
}
task forbiddenApisNonPortable ( type: CheckForbiddenApis , dependsOn: compileJava ) {
bundledSignatures + = 'jdk-non-portable'
2021-06-26 09:46:09 -04:00
}
2020-04-23 06:48:32 -04:00
2022-03-15 21:10:17 -04:00
task forbiddenApis {
description 'Grouping task for all defined forbidden-apis tasks'
}
2022-03-15 17:24:07 -04:00
2022-03-15 21:10:17 -04:00
project . tasks . withType ( CheckForbiddenApis ) {
outputs . upToDateWhen { true }
2022-03-15 17:24:07 -04:00
2022-03-15 21:10:17 -04:00
classesDirs = project . sourceSets . main . output
classpath = configurations . runtimeClasspath + configurations . compileClasspath
targetCompatibility = project . forbiddenAPITargetJDKCompatibility
2022-03-15 17:24:07 -04:00
2022-03-15 21:10:17 -04:00
// This slows down the checks a little, but is necessary to avoid the gradle daemon holding on
2020-04-23 06:48:32 -04:00
// to class definitions loaded previously - even possibly in a previous build.
2022-03-15 21:10:17 -04:00
disableClassloadingCache = true
2022-03-15 17:24:07 -04:00
2022-03-15 21:10:17 -04:00
tasks . forbiddenApis . finalizedBy it
2021-06-26 09:46:09 -04:00
}
2020-04-16 06:46:19 -04:00
2021-06-26 09:46:09 -04:00
project . tasks . check . finalizedBy tasks . forbiddenApis