From 78c861c78f455302bb03778f9a0cc60ffe09ce77 Mon Sep 17 00:00:00 2001 From: Yun Zou Date: Mon, 7 Apr 2025 14:49:08 -0700 Subject: [PATCH 1/3] avoid adding duplicated projects for IDE --- .../src/main/kotlin/polaris-java.gradle.kts | 5 ++ .../src/main/kotlin/polaris-root.gradle.kts | 12 ++-- .../main/kotlin/polaris-spotless.gradle.kts | 65 ++++++++++--------- settings.gradle.kts | 29 +++++++-- 4 files changed, 71 insertions(+), 40 deletions(-) diff --git a/build-logic/src/main/kotlin/polaris-java.gradle.kts b/build-logic/src/main/kotlin/polaris-java.gradle.kts index 06a60a395e..63475383a2 100644 --- a/build-logic/src/main/kotlin/polaris-java.gradle.kts +++ b/build-logic/src/main/kotlin/polaris-java.gradle.kts @@ -37,6 +37,11 @@ plugins { apply() +if (project.extra.has("duplicated-project-sources")) { + // skip the style check for duplicated projects + tasks.withType().configureEach { enabled = false } +} + tasks.withType(JavaCompile::class.java).configureEach { options.compilerArgs.addAll(listOf("-Xlint:unchecked", "-Xlint:deprecation")) options.errorprone.disableAllWarnings = true diff --git a/build-logic/src/main/kotlin/polaris-root.gradle.kts b/build-logic/src/main/kotlin/polaris-root.gradle.kts index 96faa07b82..4f74005891 100644 --- a/build-logic/src/main/kotlin/polaris-root.gradle.kts +++ b/build-logic/src/main/kotlin/polaris-root.gradle.kts @@ -33,11 +33,13 @@ apply() apply() -spotless { - kotlinGradle { - ktfmt().googleStyle() - licenseHeaderFile(rootProject.file("codestyle/copyright-header-java.txt"), "$") - target("*.gradle.kts", "build-logic/*.gradle.kts", "build-logic/src/**/*.kt*") +if (!project.extra.has("duplicated-project-sources")) { + spotless { + kotlinGradle { + ktfmt().googleStyle() + licenseHeaderFile(rootProject.file("codestyle/copyright-header-java.txt"), "$") + target("*.gradle.kts", "build-logic/*.gradle.kts", "build-logic/src/**/*.kt*") + } } } diff --git a/build-logic/src/main/kotlin/polaris-spotless.gradle.kts b/build-logic/src/main/kotlin/polaris-spotless.gradle.kts index 96f6af87b0..86a99fa706 100644 --- a/build-logic/src/main/kotlin/polaris-spotless.gradle.kts +++ b/build-logic/src/main/kotlin/polaris-spotless.gradle.kts @@ -25,37 +25,40 @@ import org.gradle.api.GradleException plugins { id("com.diffplug.spotless") } -spotless { - java { - target("src/*/java/**/*.java") - googleJavaFormat() - licenseHeaderFile(rootProject.file("codestyle/copyright-header-java.txt")) - endWithNewline() - custom( - "disallowWildcardImports", - object : Serializable, FormatterFunc { - override fun apply(text: String): String { - val regex = "~/import .*\\.\\*;/".toRegex() - if (regex.matches(text)) { - throw GradleException("Wildcard imports disallowed - ${regex.findAll(text)}") +// skip spotless check for duplicated projects +if (!project.extra.has("duplicated-project-sources")) { + spotless { + java { + target("src/*/java/**/*.java") + googleJavaFormat() + licenseHeaderFile(rootProject.file("codestyle/copyright-header-java.txt")) + endWithNewline() + custom( + "disallowWildcardImports", + object : Serializable, FormatterFunc { + override fun apply(text: String): String { + val regex = "~/import .*\\.\\*;/".toRegex() + if (regex.matches(text)) { + throw GradleException("Wildcard imports disallowed - ${regex.findAll(text)}") + } + return text } - return text - } - }, - ) - toggleOffOn() - } - kotlinGradle { - ktfmt().googleStyle() - licenseHeaderFile(rootProject.file("codestyle/copyright-header-java.txt"), "$") - target("*.gradle.kts") - } - format("xml") { - target("src/**/*.xml", "src/**/*.xsd") - targetExclude("codestyle/copyright-header.xml") - eclipseWtp(com.diffplug.spotless.extra.wtp.EclipseWtpFormatterStep.XML) - .configFile(rootProject.file("codestyle/org.eclipse.wst.xml.core.prefs")) - // getting the license-header delimiter right is a bit tricky. - // licenseHeaderFile(rootProject.file("codestyle/copyright-header.xml"), '<^[!?].*$') + }, + ) + toggleOffOn() + } + kotlinGradle { + ktfmt().googleStyle() + licenseHeaderFile(rootProject.file("codestyle/copyright-header-java.txt"), "$") + target("*.gradle.kts") + } + format("xml") { + target("src/**/*.xml", "src/**/*.xsd") + targetExclude("codestyle/copyright-header.xml") + eclipseWtp(com.diffplug.spotless.extra.wtp.EclipseWtpFormatterStep.XML) + .configFile(rootProject.file("codestyle/org.eclipse.wst.xml.core.prefs")) + // getting the license-header delimiter right is a bit tricky. + // licenseHeaderFile(rootProject.file("codestyle/copyright-header.xml"), '<^[!?].*$') + } } } diff --git a/settings.gradle.kts b/settings.gradle.kts index 3884bea5bc..ecff39b4fa 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -57,18 +57,39 @@ loadProperties(file("gradle/projects.main.properties")).forEach { name, director polarisProject(name as String, file(directory as String)) } +val ideActive = System.getProperty("idea.active").toBoolean() + // load the polaris spark plugin projects val polarisSparkDir = "plugins/spark" val sparkScalaVersions = loadProperties(file("${polarisSparkDir}/spark-scala.properties")) val sparkVersions = sparkScalaVersions["sparkVersions"].toString().split(",").map { it.trim() } +// records the spark projects that maps to the same project dir +val noSourceChecksProjects = mutableSetOf() + for (sparkVersion in sparkVersions) { val scalaVersions = sparkScalaVersions["scalaVersions"].toString().split(",").map { it.trim() } + var first = true for (scalaVersion in scalaVersions) { - polarisProject( - "polaris-spark-${sparkVersion}_${scalaVersion}", - file("${polarisSparkDir}/v${sparkVersion}"), - ) + val artifactId = "polaris-spark-${sparkVersion}_${scalaVersion}" + polarisProject(artifactId, file("${polarisSparkDir}/v${sparkVersion}")) + if (first) { + first = false + } else { + noSourceChecksProjects.add(":$artifactId") + } + // skip all duplicated spark client projects in IDE to avoid problems + // during Intelij dependency analysis and sync. For example: + // "Multiple projects in this build have project directory". + if (ideActive) { + break + } + } +} + +gradle.beforeProject { + if (noSourceChecksProjects.contains(this.path)) { + project.extra["duplicated-project-sources"] = true } } From faf573268cb6607d7866101c399ffa240aaf61e4 Mon Sep 17 00:00:00 2001 From: Yun Zou Date: Fri, 11 Apr 2025 16:10:23 -0700 Subject: [PATCH 2/3] address feedback --- settings.gradle.kts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/settings.gradle.kts b/settings.gradle.kts index ecff39b4fa..61b66255ad 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -57,7 +57,7 @@ loadProperties(file("gradle/projects.main.properties")).forEach { name, director polarisProject(name as String, file(directory as String)) } -val ideActive = System.getProperty("idea.active").toBoolean() +val ideaActive = System.getProperty("idea.active").toBoolean() // load the polaris spark plugin projects val polarisSparkDir = "plugins/spark" @@ -78,10 +78,10 @@ for (sparkVersion in sparkVersions) { } else { noSourceChecksProjects.add(":$artifactId") } - // skip all duplicated spark client projects in IDE to avoid problems - // during Intelij dependency analysis and sync. For example: - // "Multiple projects in this build have project directory". - if (ideActive) { + // Skip all duplicated spark client projects while using Intelij IDE. + // This is to avoid problems during Intelij dependency analysis and sync, + // like "Multiple projects in this build have project directory". + if (ideaActive) { break } } From edd87e5dc2d5145a5d19fc0b04f6fd6c3d2cfd6c Mon Sep 17 00:00:00 2001 From: Yun Zou Date: Fri, 11 Apr 2025 16:12:33 -0700 Subject: [PATCH 3/3] update comments --- settings.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/settings.gradle.kts b/settings.gradle.kts index 61b66255ad..3d658130d8 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -79,8 +79,8 @@ for (sparkVersion in sparkVersions) { noSourceChecksProjects.add(":$artifactId") } // Skip all duplicated spark client projects while using Intelij IDE. - // This is to avoid problems during Intelij dependency analysis and sync, - // like "Multiple projects in this build have project directory". + // This is to avoid problems during dependency analysis and sync when + // using Intelij, like "Multiple projects in this build have project directory". if (ideaActive) { break }