Message-ID: From: "davecramer (@davecramer)" To: "pgjdbc/pgjdbc" Date: Wed, 03 Jun 2026 18:51:14 +0000 Subject: [pgjdbc/pgjdbc] PR #4143: Simplify build List-Id: X-GitHub-Additions: 160 X-GitHub-Author-Id: 406518 X-GitHub-Author-Login: davecramer X-GitHub-Base: master X-GitHub-Changed-Files: 45 X-GitHub-Commits: 3 X-GitHub-Deletions: 332 X-GitHub-Draft: true X-GitHub-Head-Branch: simplify_build X-GitHub-Head-SHA: 9fa455ac02e01b9b3e2f7fa6d541747014cfae9f X-GitHub-Issue: 4143 X-GitHub-Repo: pgjdbc/pgjdbc X-GitHub-State: open X-GitHub-Type: pull_request X-GitHub-Url: https://github.com/pgjdbc/pgjdbc/pull/4143 Content-Type: text/plain; charset=utf-8 refactor: consolidate build-logic into a single conventions module Merge 8 build-logic sub-modules (basics, jvm, java-comment-preprocessor, publishing, root-build, verification) plus build-logic-commons into one conventions module. This eliminates redundant Kotlin compilation passes during Gradle configuration. - Reduces build-logic tasks from 92 to 18 for :postgresql:compileJava - Cold build time drops from ~31s to ~15s (52% faster) - Delete 6 plugins: toolchains (empty), java-library (wrapper), kotlin (unused), repositories/reproducible-builds/publish-to-tmp-maven-repo (inlined) - All verification tools, publishing, and test config preserved refactor: drop com.github.vlsi gradle-extensions/crlf helpers from conventions Replace `tasks.configureEach` with stdlib `tasks.withType().configureEach` and swap `props.string(name)` for `project.findProperty(name) as? String` so the conventions plugin no longer depends on `com.github.vlsi.gradle-extensions` or `com.github.vlsi.crlf`. diff --git a/benchmarks/build.gradle.kts b/benchmarks/build.gradle.kts index 504838a235..bb9a0e0363 100644 --- a/benchmarks/build.gradle.kts +++ b/benchmarks/build.gradle.kts @@ -3,7 +3,8 @@ * See the LICENSE file in the project root for more information. */ plugins { - id("build-logic.java-library") + id("build-logic.java") + id("java-library") id("me.champeau.jmh") } diff --git a/build-logic-commons/.gitignore b/build-logic-commons/.gitignore deleted file mode 100644 index de8b137467..0000000000 --- a/build-logic-commons/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/*/build/ diff --git a/build-logic-commons/gradle-plugin/build.gradle.kts b/build-logic-commons/gradle-plugin/build.gradle.kts deleted file mode 100644 index d23bc57ca7..0000000000 --- a/build-logic-commons/gradle-plugin/build.gradle.kts +++ /dev/null @@ -1,27 +0,0 @@ -import org.gradle.kotlin.dsl.support.expectedKotlinDslPluginsVersion - -plugins { - `kotlin-dsl` -} - -group = "org.postgresql.build-logic" - -dependencies { - // We use precompiled script plugins (== plugins written as src/kotlin/build-logic.*.gradle.kts files, - // and we need to declare dependency on org.gradle.kotlin.kotlin-dsl:org.gradle.kotlin.kotlin-dsl.gradle.plugin - // to make it work. - // See https://github.com/gradle/gradle/issues/17016 regarding expectedKotlinDslPluginsVersion - implementation("org.gradle.kotlin.kotlin-dsl:org.gradle.kotlin.kotlin-dsl.gradle.plugin:$expectedKotlinDslPluginsVersion") -} - -// We need to figure out a version that is supported by the current JVM, and by the Kotlin Gradle plugin -// So we settle on 21, 17, or 11 if the current JVM supports it -listOf(21, 17, 11) - .firstOrNull { JavaVersion.toVersion(it) <= JavaVersion.current() } - ?.let { buildScriptJvmTarget -> - java { - toolchain { - languageVersion.set(JavaLanguageVersion.of(buildScriptJvmTarget)) - } - } - } diff --git a/build-logic-commons/gradle-plugin/src/main/kotlin/build-logic.kotlin-dsl-gradle-plugin.gradle.kts b/build-logic-commons/gradle-plugin/src/main/kotlin/build-logic.kotlin-dsl-gradle-plugin.gradle.kts deleted file mode 100644 index 24ee745d27..0000000000 --- a/build-logic-commons/gradle-plugin/src/main/kotlin/build-logic.kotlin-dsl-gradle-plugin.gradle.kts +++ /dev/null @@ -1,21 +0,0 @@ -plugins { - id("java-library") - id("org.gradle.kotlin.kotlin-dsl") // this is 'kotlin-dsl' without version -} - -tasks.validatePlugins { - failOnWarning.set(true) - enableStricterValidation.set(true) -} - -// We need to figure out a version that is supported by the current JVM, and by the Kotlin Gradle plugin -// So we settle on 21, 17, or 11 if the current JVM supports it -listOf(21, 17, 11) - .firstOrNull { JavaVersion.toVersion(it) <= JavaVersion.current() } - ?.let { buildScriptJvmTarget -> - java { - toolchain { - languageVersion.set(JavaLanguageVersion.of(buildScriptJvmTarget)) - } - } - } diff --git a/build-logic-commons/settings.gradle.kts b/build-logic-commons/settings.gradle.kts deleted file mode 100644 index e32971bde7..0000000000 --- a/build-logic-commons/settings.gradle.kts +++ /dev/null @@ -1,9 +0,0 @@ -dependencyResolutionManagement { - repositories { - gradlePluginPortal() - } -} - -rootProject.name = "build-logic-commons" - -include("gradle-plugin") diff --git a/build-logic/basics/build.gradle.kts b/build-logic/basics/build.gradle.kts deleted file mode 100644 index 16006a2903..0000000000 --- a/build-logic/basics/build.gradle.kts +++ /dev/null @@ -1,7 +0,0 @@ -plugins { - id("build-logic.kotlin-dsl-gradle-plugin") -} - -dependencies { - implementation(project(":build-parameters")) -} diff --git a/build-logic/basics/src/main/kotlin/build-logic.repositories.gradle.kts b/build-logic/basics/src/main/kotlin/build-logic.repositories.gradle.kts deleted file mode 100644 index 7807dac9bd..0000000000 --- a/build-logic/basics/src/main/kotlin/build-logic.repositories.gradle.kts +++ /dev/null @@ -1,20 +0,0 @@ -plugins { - id("build-logic.build-params") -} - -repositories { - if (buildParameters.enableMavenLocal) { - mavenLocal() - } - mavenCentral { - mavenContent { - releasesOnly() - } - } - maven { - url = uri("https://oss.sonatype.org/content/repositories/snapshots/") - mavenContent { - snapshotsOnly() - } - } -} diff --git a/build-logic/basics/src/main/kotlin/build-logic.reproducible-builds.gradle.kts b/build-logic/basics/src/main/kotlin/build-logic.reproducible-builds.gradle.kts deleted file mode 100644 index f46c912ddb..0000000000 --- a/build-logic/basics/src/main/kotlin/build-logic.reproducible-builds.gradle.kts +++ /dev/null @@ -1,34 +0,0 @@ -tasks.withType().configureEach { - // Ensure builds are reproducible - isPreserveFileTimestamps = false - isReproducibleFileOrder = true - dirPermissions { - user { - read = true - write = true - execute = true - } - group { - read = true - write = true - execute = true - } - other { - read = true - execute = true - } - } - filePermissions { - user { - read = true - write = true - } - group { - read = true - write = true - } - other { - read = true - } - } -} diff --git a/build-logic/basics/src/main/kotlin/build-logic.toolchains.gradle.kts b/build-logic/basics/src/main/kotlin/build-logic.toolchains.gradle.kts deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/build-logic/build-parameters/build.gradle.kts b/build-logic/build-parameters/build.gradle.kts index 05020324e6..ac0d856c95 100644 --- a/build-logic/build-parameters/build.gradle.kts +++ b/build-logic/build-parameters/build.gradle.kts @@ -1,7 +1,7 @@ plugins { id("org.gradlex.build-parameters") version "1.4.5" id("com.github.vlsi.gradle-extensions") version "3.0.2" - id("build-logic.kotlin-dsl-gradle-plugin") + id("java-library") } buildParameters { diff --git a/build-logic/conventions/build.gradle.kts b/build-logic/conventions/build.gradle.kts new file mode 100644 index 0000000000..d66b1b7b34 --- /dev/null +++ b/build-logic/conventions/build.gradle.kts @@ -0,0 +1,49 @@ +plugins { + id("org.gradle.kotlin.kotlin-dsl") +} + +group = "org.postgresql.build-logic" + +dependencies { + // Build parameters + implementation(project(":build-parameters")) + + // Basics / JVM + implementation("com.github.vlsi.crlf:com.github.vlsi.crlf.gradle.plugin:3.0.2") + implementation("com.github.vlsi.gradle-extensions:com.github.vlsi.gradle-extensions.gradle.plugin:3.0.2") + implementation("org.jetbrains.kotlin:kotlin-gradle-plugin") + implementation("com.github.autostyle:com.github.autostyle.gradle.plugin:4.0") + implementation("com.github.vlsi.jandex:com.github.vlsi.jandex.gradle.plugin:3.0.2") + + // Java comment preprocessor + implementation("com.igormaznitsa:jcp:7.3.0") + + // Publishing + implementation("com.gradleup.nmcp:com.gradleup.nmcp.gradle.plugin:1.5.0") + implementation("com.gradleup.nmcp.aggregation:com.gradleup.nmcp.aggregation.gradle.plugin:1.5.0") + implementation("com.gradleup.shadow:com.gradleup.shadow.gradle.plugin:9.4.1") + + // Verification + // See https://github.com/gradle/gradle/issues/15383#issuecomment-779893192 + implementation(files(libs.javaClass.superclass.protectionDomain.codeSource.location)) + implementation("de.thetaphi.forbiddenapis:de.thetaphi.forbiddenapis.gradle.plugin:3.10") + implementation("net.ltgt.errorprone:net.ltgt.errorprone.gradle.plugin:5.1.0") + implementation("org.checkerframework:org.checkerframework.gradle.plugin:1.0.2") + implementation("org.openrewrite.rewrite:org.openrewrite.rewrite.gradle.plugin:7.33.0") +} + +tasks.validatePlugins { + failOnWarning.set(true) + enableStricterValidation.set(true) +} + +// Use JDK 21, 17, or 11 for compiling build logic +listOf(21, 17, 11) + .firstOrNull { JavaVersion.toVersion(it) <= JavaVersion.current() } + ?.let { buildScriptJvmTarget -> + java { + toolchain { + languageVersion.set(JavaLanguageVersion.of(buildScriptJvmTarget)) + } + } + } diff --git a/build-logic/basics/src/main/kotlin/ToolchainProperties.kt b/build-logic/conventions/src/main/kotlin/ToolchainProperties.kt similarity index 100% rename from build-logic/basics/src/main/kotlin/ToolchainProperties.kt rename to build-logic/conventions/src/main/kotlin/ToolchainProperties.kt diff --git a/build-logic/verification/src/main/kotlin/build-logic.autostyle.gradle.kts b/build-logic/conventions/src/main/kotlin/build-logic.autostyle.gradle.kts similarity index 100% rename from build-logic/verification/src/main/kotlin/build-logic.autostyle.gradle.kts rename to build-logic/conventions/src/main/kotlin/build-logic.autostyle.gradle.kts diff --git a/build-logic/verification/src/main/kotlin/build-logic.checkerframework.gradle.kts b/build-logic/conventions/src/main/kotlin/build-logic.checkerframework.gradle.kts similarity index 100% rename from build-logic/verification/src/main/kotlin/build-logic.checkerframework.gradle.kts rename to build-logic/conventions/src/main/kotlin/build-logic.checkerframework.gradle.kts diff --git a/build-logic/verification/src/main/kotlin/build-logic.checkstyle.gradle.kts b/build-logic/conventions/src/main/kotlin/build-logic.checkstyle.gradle.kts similarity index 96% rename from build-logic/verification/src/main/kotlin/build-logic.checkstyle.gradle.kts rename to build-logic/conventions/src/main/kotlin/build-logic.checkstyle.gradle.kts index 9b5372c692..0371318e8e 100644 --- a/build-logic/verification/src/main/kotlin/build-logic.checkstyle.gradle.kts +++ b/build-logic/conventions/src/main/kotlin/build-logic.checkstyle.gradle.kts @@ -2,7 +2,6 @@ import com.github.vlsi.gradle.dsl.configureEach plugins { id("checkstyle") - id("build-logic.toolchains") id("build-logic.build-params") } diff --git a/build-logic/verification/src/main/kotlin/build-logic.errorprone.gradle.kts b/build-logic/conventions/src/main/kotlin/build-logic.errorprone.gradle.kts similarity index 98% rename from build-logic/verification/src/main/kotlin/build-logic.errorprone.gradle.kts rename to build-logic/conventions/src/main/kotlin/build-logic.errorprone.gradle.kts index 7b9875fb6e..217a214c99 100644 --- a/build-logic/verification/src/main/kotlin/build-logic.errorprone.gradle.kts +++ b/build-logic/conventions/src/main/kotlin/build-logic.errorprone.gradle.kts @@ -5,7 +5,6 @@ import org.gradle.kotlin.dsl.dependencies plugins { id("java") - id("build-logic.repositories") id("build-logic.build-params") } diff --git a/build-logic/verification/src/main/kotlin/build-logic.forbidden-apis.gradle.kts b/build-logic/conventions/src/main/kotlin/build-logic.forbidden-apis.gradle.kts similarity index 100% rename from build-logic/verification/src/main/kotlin/build-logic.forbidden-apis.gradle.kts rename to build-logic/conventions/src/main/kotlin/build-logic.forbidden-apis.gradle.kts diff --git a/build-logic/verification/src/main/kotlin/build-logic.jacoco.gradle.kts b/build-logic/conventions/src/main/kotlin/build-logic.jacoco.gradle.kts similarity index 100% rename from build-logic/verification/src/main/kotlin/build-logic.jacoco.gradle.kts rename to build-logic/conventions/src/main/kotlin/build-logic.jacoco.gradle.kts diff --git a/build-logic/java-comment-preprocessor/src/main/kotlin/build-logic.java-comment-preprocessor.gradle.kts b/build-logic/conventions/src/main/kotlin/build-logic.java-comment-preprocessor.gradle.kts similarity index 69% rename from build-logic/java-comment-preprocessor/src/main/kotlin/build-logic.java-comment-preprocessor.gradle.kts rename to build-logic/conventions/src/main/kotlin/build-logic.java-comment-preprocessor.gradle.kts index d63eaf22be..8ad02844ee 100644 --- a/build-logic/java-comment-preprocessor/src/main/kotlin/build-logic.java-comment-preprocessor.gradle.kts +++ b/build-logic/conventions/src/main/kotlin/build-logic.java-comment-preprocessor.gradle.kts @@ -1,13 +1,6 @@ -import com.github.vlsi.gradle.dsl.configureEach -import com.github.vlsi.gradle.properties.dsl.props - -plugins { - id("com.github.vlsi.gradle-extensions") -} - -tasks.configureEach { +tasks.withType().configureEach { variables.apply { - val jdbcSpec = props.string("jdbc.specification.version") + val jdbcSpec = (project.findProperty("jdbc.specification.version") as? String) ?: "" put("mvn.project.property.postgresql.jdbc.spec", "JDBC$jdbcSpec") put("jdbc.specification.version", jdbcSpec) } diff --git a/build-logic/publishing/src/main/kotlin/build-logic.java-published-library.gradle.kts b/build-logic/conventions/src/main/kotlin/build-logic.java-published-library.gradle.kts similarity index 74% rename from build-logic/publishing/src/main/kotlin/build-logic.java-published-library.gradle.kts rename to build-logic/conventions/src/main/kotlin/build-logic.java-published-library.gradle.kts index 0d6e4f7036..00150cca89 100644 --- a/build-logic/publishing/src/main/kotlin/build-logic.java-published-library.gradle.kts +++ b/build-logic/conventions/src/main/kotlin/build-logic.java-published-library.gradle.kts @@ -2,11 +2,18 @@ import com.github.vlsi.gradle.publishing.dsl.versionFromResolution plugins { id("build-logic.build-params") - id("build-logic.java-library") - id("build-logic.reproducible-builds") + id("build-logic.java") + id("java-library") id("build-logic.publish-to-central") } +tasks.withType().configureEach { + isPreserveFileTimestamps = false + isReproducibleFileOrder = true + dirPermissions { unix("755") } + filePermissions { unix("644") } +} + java { withSourcesJar() if (!buildParameters.skipJavadoc) { diff --git a/build-logic/publishing/src/main/kotlin/build-logic.java-shaded-published-library.gradle.kts b/build-logic/conventions/src/main/kotlin/build-logic.java-shaded-published-library.gradle.kts similarity index 84% rename from build-logic/publishing/src/main/kotlin/build-logic.java-shaded-published-library.gradle.kts rename to build-logic/conventions/src/main/kotlin/build-logic.java-shaded-published-library.gradle.kts index a633a3a4fb..9fb4aff4ab 100644 --- a/build-logic/publishing/src/main/kotlin/build-logic.java-shaded-published-library.gradle.kts +++ b/build-logic/conventions/src/main/kotlin/build-logic.java-shaded-published-library.gradle.kts @@ -2,12 +2,19 @@ import com.github.vlsi.gradle.publishing.dsl.versionFromResolution plugins { id("build-logic.build-params") - id("build-logic.java-library") - id("build-logic.reproducible-builds") + id("build-logic.java") + id("java-library") id("build-logic.publish-to-central") id("com.gradleup.shadow") } +tasks.withType().configureEach { + isPreserveFileTimestamps = false + isReproducibleFileOrder = true + dirPermissions { unix("755") } + filePermissions { unix("644") } +} + java { withSourcesJar() if (!buildParameters.skipJavadoc) { diff --git a/build-logic/jvm/src/main/kotlin/build-logic.java.gradle.kts b/build-logic/conventions/src/main/kotlin/build-logic.java.gradle.kts similarity index 86% rename from build-logic/jvm/src/main/kotlin/build-logic.java.gradle.kts rename to build-logic/conventions/src/main/kotlin/build-logic.java.gradle.kts index 044a724356..c679fac3b8 100644 --- a/build-logic/jvm/src/main/kotlin/build-logic.java.gradle.kts +++ b/build-logic/conventions/src/main/kotlin/build-logic.java.gradle.kts @@ -1,28 +1,40 @@ import com.github.vlsi.gradle.crlf.CrLfSpec import com.github.vlsi.gradle.crlf.LineEndings -import com.github.vlsi.gradle.dsl.configureEach -import com.github.vlsi.gradle.properties.dsl.props import java.time.LocalDate plugins { id("java") id("com.github.vlsi.crlf") - id("com.github.vlsi.gradle-extensions") - id("build-logic.repositories") id("build-logic.test-base") id("build-logic.build-params") id("build-logic.style") - id("build-logic.toolchains") id("com.github.vlsi.jandex") } +repositories { + if (buildParameters.enableMavenLocal) { + mavenLocal() + } + mavenCentral { + mavenContent { + releasesOnly() + } + } + maven { + url = uri("https://oss.sonatype.org/content/repositories/snapshots/") + mavenContent { + snapshotsOnly() + } + } +} + java { toolchain { configureToolchain(buildParameters.buildJdk) } } -tasks.configureEach { +tasks.withType().configureEach { buildParameters.testJdk?.let { javaLauncher.convention(javaToolchains.launcherFor(it)) } @@ -42,7 +54,7 @@ project.configure { } if (!buildParameters.enableGradleMetadata) { - tasks.configureEach { + tasks.withType().configureEach { enabled = false } } @@ -51,7 +63,7 @@ if (buildParameters.coverage || gradle.startParameter.taskNames.any { it.contain apply(plugin = "build-logic.jacoco") } -tasks.configureEach { +tasks.withType().configureEach { options.apply { encoding = "UTF-8" // Use --release=8 for Java 10+ so the generated bytecode does not include methods introduced in Java 9+ @@ -81,7 +93,7 @@ tasks.configureEach { } } -tasks.configureEach { +tasks.withType().configureEach { (options as StandardJavadocDocletOptions).apply { // Please refrain from using non-ASCII chars below since the options are passed as // javadoc.options file which is parsed with "default encoding" @@ -121,24 +133,24 @@ tasks.configureEach { // Add default license/notice when missing (e.g. see :src:config that overrides LICENSE) afterEvaluate { - tasks.configureEach { + tasks.withType().configureEach { CrLfSpec(LineEndings.LF).run { into("META-INF") { filteringCharset = "UTF-8" duplicatesStrategy = DuplicatesStrategy.EXCLUDE - from("$rootDir/LICENSE") - from("$rootDir/NOTICE") + textFrom("$rootDir/LICENSE") + textFrom("$rootDir/NOTICE") } } } } -tasks.configureEach { +tasks.withType().configureEach { manifest { attributes["Bundle-License"] = "BSD-2-Clause" attributes["Implementation-Title"] = "PostgreSQL JDBC Driver" attributes["Implementation-Version"] = project.version - val jdbcSpec = props.string("jdbc.specification.version") + val jdbcSpec = (project.findProperty("jdbc.specification.version") as? String) ?: "" if (jdbcSpec.isNotBlank()) { attributes["Specification-Vendor"] = "Oracle Corporation" attributes["Specification-Version"] = jdbcSpec diff --git a/build-logic/verification/src/main/kotlin/build-logic.openrewrite.gradle.kts b/build-logic/conventions/src/main/kotlin/build-logic.openrewrite.gradle.kts similarity index 100% rename from build-logic/verification/src/main/kotlin/build-logic.openrewrite.gradle.kts rename to build-logic/conventions/src/main/kotlin/build-logic.openrewrite.gradle.kts diff --git a/build-logic/publishing/src/main/kotlin/build-logic.publish-to-central.gradle.kts b/build-logic/conventions/src/main/kotlin/build-logic.publish-to-central.gradle.kts similarity index 86% rename from build-logic/publishing/src/main/kotlin/build-logic.publish-to-central.gradle.kts rename to build-logic/conventions/src/main/kotlin/build-logic.publish-to-central.gradle.kts index 78fe11b5d3..3d07071b93 100644 --- a/build-logic/publishing/src/main/kotlin/build-logic.publish-to-central.gradle.kts +++ b/build-logic/conventions/src/main/kotlin/build-logic.publish-to-central.gradle.kts @@ -11,11 +11,48 @@ plugins { id("maven-publish") id("signing") id("build-logic.build-params") - id("build-logic.publish-to-tmp-maven-repo") id("com.github.vlsi.gradle-extensions") id("com.gradleup.nmcp") } +// Inline from build-logic.publish-to-tmp-maven-repo +val localRepoElements by configurations.creating { + isCanBeConsumed = true + isCanBeResolved = false + description = + "Shares local maven repository directory that contains the artifacts produced by the current project" + attributes { + attribute(Category.CATEGORY_ATTRIBUTE, objects.named("maven-repository")) + attribute(Bundling.BUNDLING_ATTRIBUTE, objects.named(Bundling.EXTERNAL)) + } +} + +val localRepoDir = layout.buildDirectory.dir("local-maven-repo") + +publishing { + repositories { + maven { + name = "tmp-maven" + url = uri(localRepoDir) + } + } +} + +localRepoElements.outgoing.artifact(localRepoDir) { + builtBy(tasks.named("publishAllPublicationsToTmp-mavenRepository")) +} + +val cleanLocalRepository by tasks.registering(Delete::class) { + description = "Clears local-maven-repo so timestamp-based snapshot artifacts do not consume space" + delete(localRepoDir) +} + +tasks.withType() + .matching { it.name.endsWith("PublicationToTmp-mavenRepository") } + .configureEach { + dependsOn(cleanLocalRepository) + } + if (!buildParameters.release) { publishing { repositories { diff --git a/build-logic/root-build/src/main/kotlin/build-logic.root-build.gradle.kts b/build-logic/conventions/src/main/kotlin/build-logic.root-build.gradle.kts similarity index 100% rename from build-logic/root-build/src/main/kotlin/build-logic.root-build.gradle.kts rename to build-logic/conventions/src/main/kotlin/build-logic.root-build.gradle.kts diff --git a/build-logic/verification/src/main/kotlin/build-logic.style.gradle.kts b/build-logic/conventions/src/main/kotlin/build-logic.style.gradle.kts similarity index 100% rename from build-logic/verification/src/main/kotlin/build-logic.style.gradle.kts rename to build-logic/conventions/src/main/kotlin/build-logic.style.gradle.kts diff --git a/build-logic/jvm/src/main/kotlin/build-logic.test-base.gradle.kts b/build-logic/conventions/src/main/kotlin/build-logic.test-base.gradle.kts similarity index 81% rename from build-logic/jvm/src/main/kotlin/build-logic.test-base.gradle.kts rename to build-logic/conventions/src/main/kotlin/build-logic.test-base.gradle.kts index 4e6b90482b..bbe51ce6bb 100644 --- a/build-logic/jvm/src/main/kotlin/build-logic.test-base.gradle.kts +++ b/build-logic/conventions/src/main/kotlin/build-logic.test-base.gradle.kts @@ -1,13 +1,9 @@ -import com.github.vlsi.gradle.dsl.configureEach -import com.github.vlsi.gradle.properties.dsl.props -import org.gradle.api.tasks.testing.Test - plugins { id("java-library") id("build-logic.build-params") } -tasks.configureEach { +tasks.withType().configureEach { buildParameters.testJdk?.let { javaLauncher.convention(javaToolchains.launcherFor(it)) } @@ -28,7 +24,8 @@ tasks.configureEach { if (buildParameters.testJdkVersion >= 21) { jvmArgs("-XX:+EnableDynamicAgentLoading") } - props.string("testExtraJvmArgs").trim().takeIf { it.isNotBlank() }?.let { + val testExtraJvmArgs = (project.findProperty("testExtraJvmArgs") as? String) ?: "" + testExtraJvmArgs.trim().takeIf { it.isNotBlank() }?.let { jvmArgs(it.split(" ::: ")) } // Pass the property to tests @@ -40,9 +37,9 @@ tasks.configureEach { passProperty("java.awt.headless") passProperty("user.language", "TR") passProperty("user.country", "tr") - val props = System.getProperties() + val sysProps = System.getProperties() @Suppress("UNCHECKED_CAST") - for (e in props.propertyNames() as `java.util`.Enumeration) { + for (e in sysProps.propertyNames() as `java.util`.Enumeration) { if (e.startsWith("pgjdbc.")) { passProperty(e) } diff --git a/build-logic/jvm/src/main/kotlin/build-logic.test-junit5.gradle.kts b/build-logic/conventions/src/main/kotlin/build-logic.test-junit5.gradle.kts similarity index 87% rename from build-logic/jvm/src/main/kotlin/build-logic.test-junit5.gradle.kts rename to build-logic/conventions/src/main/kotlin/build-logic.test-junit5.gradle.kts index 1ca84140cf..44ee93eab6 100644 --- a/build-logic/jvm/src/main/kotlin/build-logic.test-junit5.gradle.kts +++ b/build-logic/conventions/src/main/kotlin/build-logic.test-junit5.gradle.kts @@ -1,6 +1,3 @@ -import com.github.vlsi.gradle.dsl.configureEach -import com.github.vlsi.gradle.properties.dsl.props - plugins { id("java-library") id("build-logic.build-params") @@ -25,11 +22,10 @@ dependencies { testRuntimeOnly("org.junit.platform:junit-platform-launcher") } -tasks.configureEach { +tasks.withType().configureEach { useJUnitPlatform { - props.string("includeTestTags") - .takeIf { it.isNotBlank() } - ?.let { includeTags(it) } + val includeTestTags = (project.findProperty("includeTestTags") as? String) ?: "" + includeTestTags.takeIf { it.isNotBlank() }?.let { includeTags(it) } } // Pass the property to tests fun passProperty(name: String, default: String? = null) { diff --git a/build-logic/jvm/src/main/kotlin/build-logic.without-type-annotations.gradle.kts b/build-logic/conventions/src/main/kotlin/build-logic.without-type-annotations.gradle.kts similarity index 100% rename from build-logic/jvm/src/main/kotlin/build-logic.without-type-annotations.gradle.kts rename to build-logic/conventions/src/main/kotlin/build-logic.without-type-annotations.gradle.kts diff --git a/build-logic/java-comment-preprocessor/src/main/kotlin/buildlogic/JavaCommentPreprocessorTask.kt b/build-logic/conventions/src/main/kotlin/buildlogic/JavaCommentPreprocessorTask.kt similarity index 100% rename from build-logic/java-comment-preprocessor/src/main/kotlin/buildlogic/JavaCommentPreprocessorTask.kt rename to build-logic/conventions/src/main/kotlin/buildlogic/JavaCommentPreprocessorTask.kt diff --git a/build-logic/basics/src/main/kotlin/configureToolchain.kt b/build-logic/conventions/src/main/kotlin/configureToolchain.kt similarity index 100% rename from build-logic/basics/src/main/kotlin/configureToolchain.kt rename to build-logic/conventions/src/main/kotlin/configureToolchain.kt diff --git a/build-logic/java-comment-preprocessor/build.gradle.kts b/build-logic/java-comment-preprocessor/build.gradle.kts deleted file mode 100644 index 849924d5ff..0000000000 --- a/build-logic/java-comment-preprocessor/build.gradle.kts +++ /dev/null @@ -1,8 +0,0 @@ -plugins { - id("build-logic.kotlin-dsl-gradle-plugin") -} - -dependencies { - implementation("com.igormaznitsa:jcp:7.3.0") - implementation("com.github.vlsi.gradle-extensions:com.github.vlsi.gradle-extensions.gradle.plugin:3.0.2") -} diff --git a/build-logic/jvm/build.gradle.kts b/build-logic/jvm/build.gradle.kts deleted file mode 100644 index 42afc21ce4..0000000000 --- a/build-logic/jvm/build.gradle.kts +++ /dev/null @@ -1,14 +0,0 @@ -plugins { - id("build-logic.kotlin-dsl-gradle-plugin") -} - -dependencies { - implementation(project(":basics")) - implementation(project(":build-parameters")) - implementation(project(":verification")) - implementation("com.github.vlsi.crlf:com.github.vlsi.crlf.gradle.plugin:3.0.2") - implementation("com.github.vlsi.gradle-extensions:com.github.vlsi.gradle-extensions.gradle.plugin:3.0.2") - implementation("org.jetbrains.kotlin:kotlin-gradle-plugin") - implementation("com.github.autostyle:com.github.autostyle.gradle.plugin:4.0") - implementation("com.github.vlsi.jandex:com.github.vlsi.jandex.gradle.plugin:3.0.2") -} diff --git a/build-logic/jvm/src/main/kotlin/build-logic.java-library.gradle.kts b/build-logic/jvm/src/main/kotlin/build-logic.java-library.gradle.kts deleted file mode 100644 index 5760723959..0000000000 --- a/build-logic/jvm/src/main/kotlin/build-logic.java-library.gradle.kts +++ /dev/null @@ -1,4 +0,0 @@ -plugins { - id("build-logic.java") - id("java-library") -} diff --git a/build-logic/jvm/src/main/kotlin/build-logic.kotlin.gradle.kts b/build-logic/jvm/src/main/kotlin/build-logic.kotlin.gradle.kts deleted file mode 100644 index 969f37cd74..0000000000 --- a/build-logic/jvm/src/main/kotlin/build-logic.kotlin.gradle.kts +++ /dev/null @@ -1,51 +0,0 @@ -import com.github.vlsi.gradle.dsl.configureEach -import org.jetbrains.kotlin.gradle.dsl.JvmTarget -import org.jetbrains.kotlin.gradle.dsl.KotlinVersion -import org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile - -plugins { - id("java-library") - id("build-logic.java") - id("build-logic.test-base") - id("com.github.vlsi.gradle-extensions") - id("com.github.autostyle") - kotlin("jvm") -} - -java { - withSourcesJar() -} - -val String.v: String get() = rootProject.extra["$this.version"] as String - -autostyle { - kotlin { - file("$rootDir/config/licenseHeaderRaw").takeIf { it.exists() }?.let { - licenseHeader(it.readText()) - } - trimTrailingWhitespace() - endWithNewline() - } -} - -tasks.configureEach { - compilerOptions { - if (!name.startsWith("compileTest")) { - apiVersion = KotlinVersion.fromVersion("kotlin.api".v) - } - freeCompilerArgs.add("-Xjvm-default=all") - val jdkRelease = buildParameters.targetJavaVersion.let { - when { - it < 9 -> "1.8" - else -> it.toString() - } - } - // jdk-release requires Java 9+ - buildParameters.buildJdkVersion - .takeIf { it > 8 } - ?.let { - freeCompilerArgs.add("-Xjdk-release=$jdkRelease") - } - jvmTarget = JvmTarget.fromTarget(jdkRelease) - } -} diff --git a/build-logic/publishing/build.gradle.kts b/build-logic/publishing/build.gradle.kts deleted file mode 100644 index 1046e6112e..0000000000 --- a/build-logic/publishing/build.gradle.kts +++ /dev/null @@ -1,12 +0,0 @@ -plugins { - id("build-logic.kotlin-dsl-gradle-plugin") -} - -dependencies { - implementation(project(":basics")) - implementation(project(":jvm")) - implementation(project(":build-parameters")) - implementation("com.github.vlsi.gradle-extensions:com.github.vlsi.gradle-extensions.gradle.plugin:3.0.2") - implementation("com.gradleup.nmcp:com.gradleup.nmcp.gradle.plugin:1.5.0") - implementation("com.gradleup.shadow:com.gradleup.shadow.gradle.plugin:9.4.1") -} diff --git a/build-logic/publishing/src/main/kotlin/build-logic.publish-to-tmp-maven-repo.gradle.kts b/build-logic/publishing/src/main/kotlin/build-logic.publish-to-tmp-maven-repo.gradle.kts deleted file mode 100644 index 673770849a..0000000000 --- a/build-logic/publishing/src/main/kotlin/build-logic.publish-to-tmp-maven-repo.gradle.kts +++ /dev/null @@ -1,41 +0,0 @@ -plugins { - id("java-library") - id("maven-publish") -} - -val localRepoElements by configurations.creating { - isCanBeConsumed = true - isCanBeResolved = false - description = - "Shares local maven repository directory that contains the artifacts produced by the current project" - attributes { - attribute(Category.CATEGORY_ATTRIBUTE, objects.named("maven-repository")) - attribute(Bundling.BUNDLING_ATTRIBUTE, objects.named(Bundling.EXTERNAL)) - } -} - -val localRepoDir = layout.buildDirectory.dir("local-maven-repo") - -publishing { - repositories { - maven { - name = "tmp-maven" - url = uri(localRepoDir) - } - } -} - -localRepoElements.outgoing.artifact(localRepoDir) { - builtBy(tasks.named("publishAllPublicationsToTmp-mavenRepository")) -} - -val cleanLocalRepository by tasks.registering(Delete::class) { - description = "Clears local-maven-repo so timestamp-based snapshot artifacts do not consume space" - delete(localRepoDir) -} - -tasks.withType() - .matching { it.name.endsWith("PublicationToTmp-mavenRepository") } - .configureEach { - dependsOn(cleanLocalRepository) - } diff --git a/build-logic/root-build/build.gradle.kts b/build-logic/root-build/build.gradle.kts deleted file mode 100644 index 5a5efd88f5..0000000000 --- a/build-logic/root-build/build.gradle.kts +++ /dev/null @@ -1,8 +0,0 @@ -plugins { - id("build-logic.kotlin-dsl-gradle-plugin") -} - -dependencies { - implementation(project(":build-parameters")) - implementation("com.gradleup.nmcp.aggregation:com.gradleup.nmcp.aggregation.gradle.plugin:1.5.0") -} diff --git a/build-logic/settings.gradle.kts b/build-logic/settings.gradle.kts index c63590fd1e..736c57dc9b 100644 --- a/build-logic/settings.gradle.kts +++ b/build-logic/settings.gradle.kts @@ -11,11 +11,5 @@ dependencyResolutionManagement { rootProject.name = "build-logic" -includeBuild("../build-logic-commons") include("build-parameters") -include("basics") -include("jvm") -include("java-comment-preprocessor") -include("publishing") -include("root-build") -include("verification") +include("conventions") diff --git a/build-logic/verification/build.gradle.kts b/build-logic/verification/build.gradle.kts deleted file mode 100644 index 69ec88db1c..0000000000 --- a/build-logic/verification/build.gradle.kts +++ /dev/null @@ -1,16 +0,0 @@ -plugins { - id("build-logic.kotlin-dsl-gradle-plugin") -} - -dependencies { - // See https://github.com/gradle/gradle/issues/15383#issuecomment-779893192 - implementation(files(libs.javaClass.superclass.protectionDomain.codeSource.location)) - implementation(project(":basics")) - implementation(project(":build-parameters")) - implementation("com.github.autostyle:com.github.autostyle.gradle.plugin:4.0") - implementation("com.github.vlsi.gradle-extensions:com.github.vlsi.gradle-extensions.gradle.plugin:3.0.2") - implementation("de.thetaphi.forbiddenapis:de.thetaphi.forbiddenapis.gradle.plugin:3.10") - implementation("net.ltgt.errorprone:net.ltgt.errorprone.gradle.plugin:5.1.0") - implementation("org.checkerframework:org.checkerframework.gradle.plugin:1.0.2") - implementation("org.openrewrite.rewrite:org.openrewrite.rewrite.gradle.plugin:7.33.0") -} diff --git a/build.gradle.kts b/build.gradle.kts index 98fdf71128..905932125c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -4,7 +4,6 @@ */ plugins { - id("build-logic.repositories") id("build-logic.build-params") id("build-logic.root-build") id("org.nosphere.gradle.github.actions") @@ -15,6 +14,13 @@ plugins { id("jacoco") } +repositories { + if (buildParameters.enableMavenLocal) { + mavenLocal() + } + mavenCentral() +} + buildscript { configurations.classpath { exclude("xerces") diff --git a/pgjdbc-junit4-test/build.gradle.kts b/pgjdbc-junit4-test/build.gradle.kts index a1e77b4d41..6b557732e9 100644 --- a/pgjdbc-junit4-test/build.gradle.kts +++ b/pgjdbc-junit4-test/build.gradle.kts @@ -1,5 +1,6 @@ plugins { - id("build-logic.java-library") + id("build-logic.java") + id("java-library") } dependencies { diff --git a/pgjdbc-mockito-test/build.gradle.kts b/pgjdbc-mockito-test/build.gradle.kts index a14a22d1a6..6c275acb1f 100644 --- a/pgjdbc-mockito-test/build.gradle.kts +++ b/pgjdbc-mockito-test/build.gradle.kts @@ -1,5 +1,6 @@ plugins { - id("build-logic.java-library") + id("build-logic.java") + id("java-library") id("build-logic.test-junit5") } diff --git a/pgjdbc-osgi-test/build.gradle.kts b/pgjdbc-osgi-test/build.gradle.kts index 33d82e71ec..6ec45ac248 100644 --- a/pgjdbc-osgi-test/build.gradle.kts +++ b/pgjdbc-osgi-test/build.gradle.kts @@ -1,5 +1,6 @@ plugins { - id("build-logic.java-library") + id("build-logic.java") + id("java-library") } val pgjdbcRepository by configurations.creating { diff --git a/testkit/build.gradle.kts b/testkit/build.gradle.kts index e28b3e585a..78a64abf7f 100644 --- a/testkit/build.gradle.kts +++ b/testkit/build.gradle.kts @@ -1,5 +1,6 @@ plugins { - id("build-logic.java-library") + id("build-logic.java") + id("java-library") id("build-logic.without-type-annotations") }