From ca4d64ed160ffce976b5d17fe483138f82912861 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Mon, 22 Apr 2024 11:16:37 +0100 Subject: [PATCH] Use absolute path when showing classpath where main class was not found Closes gh-40463 --- .../boot/gradle/plugin/JavaPluginAction.java | 4 ++-- .../boot/gradle/plugin/ResolveMainClassName.java | 7 +++---- .../boot/gradle/plugin/WarPluginAction.java | 4 ++-- .../boot/gradle/tasks/run/BootTestRunIntegrationTests.java | 4 ++-- 4 files changed, 9 insertions(+), 10 deletions(-) diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/JavaPluginAction.java b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/JavaPluginAction.java index c6ad89c5eb3..d31b39c7498 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/JavaPluginAction.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/JavaPluginAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2023 the original author or authors. + * Copyright 2012-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -174,7 +174,7 @@ final class JavaPluginAction implements PluginApplicationAction { .provider(() -> (String) bootJar.getManifest().getAttributes().get("Start-Class")); bootJar.getMainClass() .convention(resolveMainClassName.flatMap((resolver) -> manifestStartClass.isPresent() - ? manifestStartClass : resolveMainClassName.get().readMainClassName())); + ? manifestStartClass : resolver.readMainClassName())); bootJar.getTargetJavaVersion() .set(project.provider(() -> javaPluginExtension(project).getTargetCompatibility())); bootJar.resolvedArtifacts(runtimeClasspath.getIncoming().getArtifacts().getResolvedArtifacts()); diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/ResolveMainClassName.java b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/ResolveMainClassName.java index 30c09f60337..58439361ff7 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/ResolveMainClassName.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/ResolveMainClassName.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2023 the original author or authors. + * Copyright 2012-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -153,9 +153,8 @@ public class ResolveMainClassName extends DefaultTask { String classpath = getClasspath().filter(File::isDirectory) .getFiles() .stream() - .map((directory) -> getProject().getProjectDir().toPath().relativize(directory.toPath())) - .map(Path::toString) - .collect(Collectors.joining(",")); + .map(File::getAbsolutePath) + .collect(Collectors.joining(File.pathSeparator)); return this.outputFile.map(new ClassNameReader(classpath)); } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/WarPluginAction.java b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/WarPluginAction.java index 2e138270011..d4cf73bc8a3 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/WarPluginAction.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/WarPluginAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2023 the original author or authors. + * Copyright 2012-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -96,7 +96,7 @@ class WarPluginAction implements PluginApplicationAction { .provider(() -> (String) bootWar.getManifest().getAttributes().get("Start-Class")); bootWar.getMainClass() .convention(resolveMainClassName.flatMap((resolver) -> manifestStartClass.isPresent() - ? manifestStartClass : resolveMainClassName.get().readMainClassName())); + ? manifestStartClass : resolver.readMainClassName())); bootWar.getTargetJavaVersion() .set(project.provider(() -> javaPluginExtension(project).getTargetCompatibility())); bootWar.resolvedArtifacts(runtimeClasspath.getIncoming().getArtifacts().getResolvedArtifacts()); diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/run/BootTestRunIntegrationTests.java b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/run/BootTestRunIntegrationTests.java index 8bb449d0954..bfd83476049 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/run/BootTestRunIntegrationTests.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/run/BootTestRunIntegrationTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2023 the original author or authors. + * Copyright 2012-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -113,7 +113,7 @@ class BootTestRunIntegrationTests { else { assertThat(result.getOutput()) .contains("Main class name has not been configured and it could not be resolved from classpath " - + String.join(File.separator, "build", "classes", "java", "test")); + + canonicalPathOf("build/classes/java/test")); } }