Skip to content

Commit 6da8c88

Browse files
committed
Include library resources on classpath of AOT source generation
Closes gh-31803
1 parent c31ad5f commit 6da8c88

File tree

3 files changed

+34
-0
lines changed

3 files changed

+34
-0
lines changed

spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/SpringBootAotPlugin.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import org.gradle.api.Project;
2323
import org.gradle.api.artifacts.Configuration;
2424
import org.gradle.api.artifacts.ConfigurationContainer;
25+
import org.gradle.api.attributes.LibraryElements;
2526
import org.gradle.api.file.Directory;
2627
import org.gradle.api.plugins.JavaPlugin;
2728
import org.gradle.api.plugins.JavaPluginExtension;
@@ -75,6 +76,9 @@ private SourceSet configureAotSourceSet(Project project) {
7576
Configuration aotImplementation = configurations.getByName(aot.getImplementationConfigurationName());
7677
aotImplementation.extendsFrom(configurations.getByName(main.getImplementationConfigurationName()));
7778
aotImplementation.extendsFrom(configurations.getByName(main.getRuntimeOnlyConfigurationName()));
79+
configurations.getByName(aot.getCompileClasspathConfigurationName())
80+
.attributes((attributes) -> attributes.attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE,
81+
project.getObjects().named(LibraryElements.class, LibraryElements.CLASSES_AND_RESOURCES)));
7882
});
7983
return aotSourceSet;
8084
}

spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,11 @@
1616

1717
package org.springframework.boot.gradle.plugin;
1818

19+
import java.io.File;
20+
import java.io.IOException;
21+
import java.nio.file.Files;
22+
import java.util.List;
23+
1924
import org.junit.jupiter.api.TestTemplate;
2025

2126
import org.springframework.boot.gradle.junit.GradleCompatibility;
@@ -45,4 +50,14 @@ void applyingAotPluginCreatesGenerateAotSourcesTask() {
4550
.contains("generateAotSources exists = true");
4651
}
4752

53+
@TestTemplate
54+
void generateAotSourcesHasLibraryResourcesOnItsClasspath() throws IOException {
55+
File settings = new File(this.gradleBuild.getProjectDir(), "settings.gradle");
56+
Files.write(settings.toPath(), List.of("include 'library'"));
57+
File library = new File(this.gradleBuild.getProjectDir(), "library");
58+
library.mkdirs();
59+
Files.write(library.toPath().resolve("build.gradle"), List.of("plugins {", " id 'java-library'", "}"));
60+
assertThat(this.gradleBuild.build("generateAotSourcesClasspath").getOutput()).contains("library.jar");
61+
}
62+
4863
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
plugins {
2+
id 'org.springframework.boot'
3+
id 'org.springframework.boot.aot'
4+
id 'java'
5+
}
6+
7+
dependencies {
8+
implementation project(":library")
9+
}
10+
11+
task('generateAotSourcesClasspath') {
12+
doFirst {
13+
tasks.findByName('generateAotSources').classpath.files.each { println it }
14+
}
15+
}

0 commit comments

Comments
 (0)