diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/SpringBootAotPlugin.java b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/SpringBootAotPlugin.java index 4b752a29d1..b67b500e27 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/SpringBootAotPlugin.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/SpringBootAotPlugin.java @@ -22,6 +22,7 @@ import org.gradle.api.Plugin; import org.gradle.api.Project; import org.gradle.api.artifacts.Configuration; import org.gradle.api.artifacts.ConfigurationContainer; +import org.gradle.api.attributes.LibraryElements; import org.gradle.api.file.Directory; import org.gradle.api.plugins.JavaPlugin; import org.gradle.api.plugins.JavaPluginExtension; @@ -75,6 +76,9 @@ public class SpringBootAotPlugin implements Plugin { Configuration aotImplementation = configurations.getByName(aot.getImplementationConfigurationName()); aotImplementation.extendsFrom(configurations.getByName(main.getImplementationConfigurationName())); aotImplementation.extendsFrom(configurations.getByName(main.getRuntimeOnlyConfigurationName())); + configurations.getByName(aot.getCompileClasspathConfigurationName()) + .attributes((attributes) -> attributes.attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, + project.getObjects().named(LibraryElements.class, LibraryElements.CLASSES_AND_RESOURCES))); }); return aotSourceSet; } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests.java b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests.java index 53baad8794..d80486c438 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests.java @@ -16,6 +16,11 @@ package org.springframework.boot.gradle.plugin; +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.util.List; + import org.junit.jupiter.api.TestTemplate; import org.springframework.boot.gradle.junit.GradleCompatibility; @@ -45,4 +50,14 @@ class SpringBootAotPluginIntegrationTests { .contains("generateAotSources exists = true"); } + @TestTemplate + void generateAotSourcesHasLibraryResourcesOnItsClasspath() throws IOException { + File settings = new File(this.gradleBuild.getProjectDir(), "settings.gradle"); + Files.write(settings.toPath(), List.of("include 'library'")); + File library = new File(this.gradleBuild.getProjectDir(), "library"); + library.mkdirs(); + Files.write(library.toPath().resolve("build.gradle"), List.of("plugins {", " id 'java-library'", "}")); + assertThat(this.gradleBuild.build("generateAotSourcesClasspath").getOutput()).contains("library.jar"); + } + } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-generateAotSourcesHasLibraryResourcesOnItsClasspath.gradle b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-generateAotSourcesHasLibraryResourcesOnItsClasspath.gradle new file mode 100644 index 0000000000..2674b051dd --- /dev/null +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-generateAotSourcesHasLibraryResourcesOnItsClasspath.gradle @@ -0,0 +1,15 @@ +plugins { + id 'org.springframework.boot' + id 'org.springframework.boot.aot' + id 'java' +} + +dependencies { + implementation project(":library") +} + +task('generateAotSourcesClasspath') { + doFirst { + tasks.findByName('generateAotSources').classpath.files.each { println it } + } +}