Skip to content

Commit c4beca3

Browse files
committed
Fix Maven-based AOT generation on Windows
Closes gh-30525
1 parent 3e0994f commit c4beca3

File tree

2 files changed

+24
-21
lines changed

2 files changed

+24
-21
lines changed

spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/AotGenerateTests.java

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
* Integration tests for the Maven plugin's AOT support.
3131
*
3232
* @author Stephane Nicoll
33+
* @author Andy Wilkinson
3334
*/
3435
@ExtendWith(MavenBuildExtension.class)
3536
public class AotGenerateTests {
@@ -38,39 +39,42 @@ public class AotGenerateTests {
3839
void whenAotRunsSourcesAreGenerated(MavenBuild mavenBuild) {
3940
mavenBuild.project("aot").goals("package").execute((project) -> {
4041
Path aotDirectory = project.toPath().resolve("target/spring-aot/main");
41-
assertThat(collectRelativeFileNames(aotDirectory.resolve("sources")))
42-
.contains("org/test/SampleApplication__ApplicationContextInitializer.java");
43-
assertThat(collectRelativeFileNames(aotDirectory.resolve("resources"))).containsOnly(
44-
"META-INF/native-image/org.springframework.boot.maven.it/aot/reflect-config.json",
45-
"META-INF/native-image/org.springframework.boot.maven.it/aot/resource-config.json",
46-
"META-INF/native-image/org.springframework.boot.maven.it/aot/native-image.properties");
42+
assertThat(collectRelativePaths(aotDirectory.resolve("sources")))
43+
.contains(Path.of("org", "test", "SampleApplication__ApplicationContextInitializer.java"));
44+
assertThat(collectRelativePaths(aotDirectory.resolve("resources"))).containsOnly(
45+
Path.of("META-INF", "native-image", "org.springframework.boot.maven.it", "aot",
46+
"reflect-config.json"),
47+
Path.of("META-INF", "native-image", "org.springframework.boot.maven.it", "aot",
48+
"resource-config.json"),
49+
Path.of("META-INF", "native-image", "org.springframework.boot.maven.it", "aot",
50+
"native-image.properties"));
4751
});
4852
}
4953

5054
@TestTemplate
5155
void whenAotRunsSourcesAreCompiled(MavenBuild mavenBuild) {
5256
mavenBuild.project("aot").goals("package").execute((project) -> {
5357
Path classesDirectory = project.toPath().resolve("target/classes");
54-
assertThat(collectRelativeFileNames(classesDirectory))
55-
.contains("org/test/SampleApplication__ApplicationContextInitializer.class");
58+
assertThat(collectRelativePaths(classesDirectory))
59+
.contains(Path.of("org", "test", "SampleApplication__ApplicationContextInitializer.class"));
5660
});
5761
}
5862

5963
@TestTemplate
6064
void whenAotRunsResourcesAreCopiedToTargetClasses(MavenBuild mavenBuild) {
6165
mavenBuild.project("aot").goals("package").execute((project) -> {
6266
Path classesDirectory = project.toPath().resolve("target/classes/META-INF/native-image");
63-
assertThat(collectRelativeFileNames(classesDirectory)).contains(
64-
"org.springframework.boot.maven.it/aot/reflect-config.json",
65-
"org.springframework.boot.maven.it/aot/resource-config.json",
66-
"org.springframework.boot.maven.it/aot/native-image.properties");
67+
assertThat(collectRelativePaths(classesDirectory)).contains(
68+
Path.of("org.springframework.boot.maven.it", "aot", "reflect-config.json"),
69+
Path.of("org.springframework.boot.maven.it", "aot", "resource-config.json"),
70+
Path.of("org.springframework.boot.maven.it", "aot", "native-image.properties"));
6771
});
6872
}
6973

70-
Stream<String> collectRelativeFileNames(Path sourceDirectory) {
74+
Stream<Path> collectRelativePaths(Path sourceDirectory) {
7175
try {
7276
return Files.walk(sourceDirectory).filter(Files::isRegularFile)
73-
.map((path) -> path.subpath(sourceDirectory.getNameCount(), path.getNameCount()).toString());
77+
.map((path) -> path.subpath(sourceDirectory.getNameCount(), path.getNameCount()));
7478
}
7579
catch (IOException ex) {
7680
throw new IllegalStateException(ex);

spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/AotGenerateMojo.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,9 @@
2323
import java.nio.file.Path;
2424
import java.nio.file.StandardCopyOption;
2525
import java.util.ArrayList;
26-
import java.util.Arrays;
2726
import java.util.List;
2827
import java.util.Locale;
2928
import java.util.Map;
30-
import java.util.stream.Collectors;
3129

3230
import javax.tools.Diagnostic;
3331
import javax.tools.DiagnosticListener;
@@ -83,7 +81,7 @@ protected void run(File workingDirectory, String startClassName, Map<String, Str
8381
throws MojoExecutionException, MojoFailureException {
8482
try {
8583
generateAotAssets(workingDirectory, startClassName, environmentVariables);
86-
compileSourceFiles(getClassPathUrls());
84+
compileSourceFiles();
8785
copyNativeConfiguration(this.generatedResources.toPath());
8886
}
8987
catch (Exception ex) {
@@ -139,16 +137,17 @@ protected URL[] getClassPathUrls() throws MojoExecutionException {
139137
}
140138
}
141139

142-
private void compileSourceFiles(URL[] classpathUrls) throws IOException {
140+
private void compileSourceFiles() throws IOException, MojoExecutionException {
143141
List<Path> sourceFiles = Files.walk(this.generatedSources.toPath()).filter(Files::isRegularFile).toList();
144142
if (sourceFiles.isEmpty()) {
145143
return;
146144
}
147145
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
148146
try (StandardJavaFileManager fm = compiler.getStandardFileManager(null, null, null)) {
149-
List<String> options = List.of("-cp",
150-
Arrays.stream(classpathUrls).map(URL::toString).collect(Collectors.joining(File.pathSeparator)),
151-
"-d", this.classesDirectory.toPath().toAbsolutePath().toString());
147+
List<String> options = new ArrayList<>();
148+
addClasspath(options);
149+
options.add("-d");
150+
options.add(this.classesDirectory.toPath().toAbsolutePath().toString());
152151
Iterable<? extends JavaFileObject> compilationUnits = fm.getJavaFileObjectsFromPaths(sourceFiles);
153152
Errors errors = new Errors();
154153
CompilationTask task = compiler.getTask(null, fm, errors, options, null, compilationUnits);

0 commit comments

Comments
 (0)