diff --git a/buildSrc/src/main/java/org/springframework/build/api/ApiDiffPlugin.java b/buildSrc/src/main/java/org/springframework/build/api/ApiDiffPlugin.java index bebd656bf2..eee0137049 100644 --- a/buildSrc/src/main/java/org/springframework/build/api/ApiDiffPlugin.java +++ b/buildSrc/src/main/java/org/springframework/build/api/ApiDiffPlugin.java @@ -24,23 +24,22 @@ import java.util.List; import me.champeau.gradle.japicmp.JapicmpPlugin; import me.champeau.gradle.japicmp.JapicmpTask; -import org.gradle.api.Action; +import org.gradle.api.GradleException; import org.gradle.api.Plugin; import org.gradle.api.Project; import org.gradle.api.artifacts.Configuration; import org.gradle.api.artifacts.Dependency; -import org.gradle.api.artifacts.repositories.ArtifactRepository; -import org.gradle.api.artifacts.repositories.MavenArtifactRepository; -import org.gradle.api.artifacts.repositories.RepositoryContentDescriptor; import org.gradle.api.plugins.JavaBasePlugin; import org.gradle.api.plugins.JavaPlugin; import org.gradle.api.publish.maven.plugins.MavenPublishPlugin; import org.gradle.api.tasks.TaskProvider; import org.gradle.jvm.tasks.Jar; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * {@link Plugin} that applies the {@code "japicmp-gradle-plugin"} - * and create tasks for all subprojects, diffing the public API one by one + * and create tasks for all subprojects named {@code "spring-*"}, diffing the public API one by one * and creating the reports in {@code "build/reports/api-diff/$OLDVERSION_to_$NEWVERSION/"}. *

{@code "./gradlew apiDiff -PbaselineVersion=5.1.0.RELEASE"} will output the * reports for the API diff between the baseline version and the current one for all modules. @@ -51,6 +50,8 @@ import org.gradle.jvm.tasks.Jar; */ public class ApiDiffPlugin implements Plugin { + private static final Logger logger = LoggerFactory.getLogger(ApiDiffPlugin.class); + public static final String TASK_NAME = "apiDiff"; private static final String BASELINE_VERSION_PROPERTY = "baselineVersion"; @@ -70,7 +71,11 @@ public class ApiDiffPlugin implements Plugin { private void applyApiDiffConventions(Project project) { String baselineVersion = project.property(BASELINE_VERSION_PROPERTY).toString(); - project.subprojects(subProject -> createApiDiffTask(baselineVersion, subProject)); + project.subprojects(subProject -> { + if (subProject.getName().startsWith("spring-")) { + createApiDiffTask(baselineVersion, subProject); + } + }); } private void createApiDiffTask(String baselineVersion, Project project) { @@ -83,7 +88,7 @@ public class ApiDiffPlugin implements Plugin { apiDiff.setDescription("Generates an API diff report with japicmp"); apiDiff.setGroup(JavaBasePlugin.DOCUMENTATION_GROUP); - apiDiff.setOldClasspath(project.files(createBaselineConfiguration(baselineVersion, project))); + apiDiff.setOldClasspath(createBaselineConfiguration(baselineVersion, project)); TaskProvider jar = project.getTasks().withType(Jar.class).named("jar"); apiDiff.setNewArchives(project.getLayout().files(jar.get().getArchiveFile().get().getAsFile())); apiDiff.setNewClasspath(getRuntimeClassPath(project)); @@ -109,7 +114,16 @@ public class ApiDiffPlugin implements Plugin { String baseline = String.join(":", project.getGroup().toString(), project.getName(), baselineVersion); Dependency baselineDependency = project.getDependencies().create(baseline + "@jar"); - return project.getRootProject().getConfigurations().detachedConfiguration(baselineDependency); + Configuration baselineConfiguration = project.getRootProject().getConfigurations().detachedConfiguration(baselineDependency); + try { + // eagerly resolve the baseline configuration to check whether this is a new Spring module + baselineConfiguration.resolve(); + return baselineConfiguration; + } + catch (GradleException exception) { + logger.warn("Could not resolve {} - assuming this is a new Spring module.", baseline); + } + return project.getRootProject().getConfigurations().detachedConfiguration(); } private Configuration getRuntimeClassPath(Project project) { diff --git a/framework-bom/framework-bom.gradle b/framework-bom/framework-bom.gradle index 30c380c61d..840f20537f 100644 --- a/framework-bom/framework-bom.gradle +++ b/framework-bom/framework-bom.gradle @@ -7,7 +7,7 @@ group = "org.springframework" dependencies { constraints { - parent.moduleProjects.findAll{ it.name != 'spring-core-graalvm' }.sort { "$it.name" }.each { + parent.moduleProjects.sort { "$it.name" }.each { api it } } diff --git a/gradle/docs.gradle b/gradle/docs.gradle index d51206403b..470c854cc9 100644 --- a/gradle/docs.gradle +++ b/gradle/docs.gradle @@ -1,7 +1,3 @@ -ext { - documentedProjects = moduleProjects.findAll { it.name != 'spring-core-graalvm' } -} - configurations { asciidoctorExt } @@ -28,7 +24,7 @@ task api(type: Javadoc) { title = "${rootProject.description} ${version} API" dependsOn { - documentedProjects.collect { + moduleProjects.collect { it.tasks.getByName("jar") } } @@ -37,7 +33,7 @@ task api(type: Javadoc) { // ensure the javadoc process can resolve types compiled from .aj sources project(":spring-aspects").sourceSets.main.output ) - classpath += files(documentedProjects.collect { it.sourceSets.main.compileClasspath }) + classpath += files(moduleProjects.collect { it.sourceSets.main.compileClasspath }) } options { @@ -52,7 +48,7 @@ task api(type: Javadoc) { addBooleanOption('Xdoclint:syntax', true) // only check syntax with doclint addBooleanOption('Werror', true) // fail build on Javadoc warnings } - source documentedProjects.collect { project -> + source moduleProjects.collect { project -> project.sourceSets.main.allJava } maxMemory = "1024m" @@ -184,7 +180,7 @@ task schemaZip(type: Zip) { description = "Builds -${archiveClassifier} archive containing all " + "XSDs for deployment at https://springframework.org/schema." duplicatesStrategy DuplicatesStrategy.EXCLUDE - documentedProjects.each { module -> + moduleProjects.each { module -> def Properties schemas = new Properties(); module.sourceSets.main.resources.find { @@ -234,7 +230,7 @@ task distZip(type: Zip, dependsOn: [docsZip, schemaZip]) { into "${baseDir}/schema" } - documentedProjects.each { module -> + moduleProjects.each { module -> into ("${baseDir}/libs") { from module.jar if (module.tasks.findByPath("sourcesJar")) { @@ -247,4 +243,4 @@ task distZip(type: Zip, dependsOn: [docsZip, schemaZip]) { } } -distZip.mustRunAfter documentedProjects.check +distZip.mustRunAfter moduleProjects.check diff --git a/settings.gradle b/settings.gradle index 4b5d2a7fe9..68db124f87 100644 --- a/settings.gradle +++ b/settings.gradle @@ -18,8 +18,8 @@ include "spring-context" include "spring-context-indexer" include "spring-context-support" include "spring-core" -include "spring-core-graalvm" -project(':spring-core-graalvm').projectDir = file('spring-core/graalvm') +include "graalvm-feature" +project(':graalvm-feature').projectDir = file('spring-core/graalvm') include "spring-core-test" include "spring-expression" include "spring-instrument" diff --git a/spring-core/graalvm/spring-core-graalvm.gradle b/spring-core/graalvm/graalvm-feature.gradle similarity index 87% rename from spring-core/graalvm/spring-core-graalvm.gradle rename to spring-core/graalvm/graalvm-feature.gradle index 58319b2de5..8a5797adac 100644 --- a/spring-core/graalvm/spring-core-graalvm.gradle +++ b/spring-core/graalvm/graalvm-feature.gradle @@ -34,15 +34,3 @@ eclipse.classpath.file { dependencies { compileOnly("org.graalvm.nativeimage:svm") } - -tasks.withType(PublishToMavenRepository) { - enabled = false -} - -tasks.withType(PublishToMavenLocal) { - enabled = false -} - -tasks.withType(Javadoc) { - enabled = false -} \ No newline at end of file diff --git a/spring-core/spring-core.gradle b/spring-core/spring-core.gradle index 0517e19e55..523974786d 100644 --- a/spring-core/spring-core.gradle +++ b/spring-core/spring-core.gradle @@ -45,7 +45,7 @@ dependencies { cglib("cglib:cglib:${cglibVersion}@jar") javapoet("com.squareup:javapoet:${javapoetVersion}@jar") objenesis("org.objenesis:objenesis:${objenesisVersion}@jar") - graalvm(project(path: ":spring-core-graalvm", configuration: 'classesOnlyElements')) + graalvm(project(path: ":graalvm-feature", configuration: 'classesOnlyElements')) api(files(cglibRepackJar)) api(files(javapoetRepackJar)) api(files(objenesisRepackJar))