Commit c85cc33c authored by Andy Wilkinson's avatar Andy Wilkinson

Fix main class resolution failure when loaded from config cache

See gh-22922
parent cb31d954
...@@ -28,7 +28,9 @@ import org.gradle.api.DefaultTask; ...@@ -28,7 +28,9 @@ import org.gradle.api.DefaultTask;
import org.gradle.api.InvalidUserDataException; import org.gradle.api.InvalidUserDataException;
import org.gradle.api.Project; import org.gradle.api.Project;
import org.gradle.api.Task; import org.gradle.api.Task;
import org.gradle.api.Transformer;
import org.gradle.api.file.FileCollection; import org.gradle.api.file.FileCollection;
import org.gradle.api.file.RegularFile;
import org.gradle.api.file.RegularFileProperty; import org.gradle.api.file.RegularFileProperty;
import org.gradle.api.plugins.BasePlugin; import org.gradle.api.plugins.BasePlugin;
import org.gradle.api.plugins.Convention; import org.gradle.api.plugins.Convention;
...@@ -136,19 +138,7 @@ public class ResolveMainClassName extends DefaultTask { ...@@ -136,19 +138,7 @@ public class ResolveMainClassName extends DefaultTask {
} }
Provider<String> readMainClassName() { Provider<String> readMainClassName() {
return this.outputFile.map((file) -> { return this.outputFile.map(new ClassNameReader());
if (file.getAsFile().length() == 0) {
throw new InvalidUserDataException(
"Main class name has not been configured and it could not be resolved");
}
Path output = file.getAsFile().toPath();
try {
return new String(Files.readAllBytes(output), StandardCharsets.UTF_8);
}
catch (IOException ex) {
throw new RuntimeException("Failed to read main class name from '" + output + "'");
}
});
} }
static TaskProvider<ResolveMainClassName> registerForTask(String taskName, Project project, static TaskProvider<ResolveMainClassName> registerForTask(String taskName, Project project,
...@@ -189,4 +179,23 @@ public class ResolveMainClassName extends DefaultTask { ...@@ -189,4 +179,23 @@ public class ResolveMainClassName extends DefaultTask {
} }
} }
private static final class ClassNameReader implements Transformer<String, RegularFile> {
@Override
public String transform(RegularFile file) {
if (file.getAsFile().length() == 0) {
throw new InvalidUserDataException(
"Main class name has not been configured and it could not be resolved");
}
Path output = file.getAsFile().toPath();
try {
return new String(Files.readAllBytes(output), StandardCharsets.UTF_8);
}
catch (IOException ex) {
throw new RuntimeException("Failed to read main class name from '" + output + "'");
}
}
}
} }
...@@ -198,6 +198,8 @@ abstract class AbstractBootArchiveIntegrationTests { ...@@ -198,6 +198,8 @@ abstract class AbstractBootArchiveIntegrationTests {
Attributes mainAttributes = jarFile.getManifest().getMainAttributes(); Attributes mainAttributes = jarFile.getManifest().getMainAttributes();
assertThat(mainAttributes.getValue("Start-Class")).isEqualTo("com.example.main.CustomMainClass"); assertThat(mainAttributes.getValue("Start-Class")).isEqualTo("com.example.main.CustomMainClass");
} }
assertThat(this.gradleBuild.build(this.taskName).task(":" + this.taskName).getOutcome())
.isEqualTo(TaskOutcome.UP_TO_DATE);
} }
private void copyMainClassApplication() throws IOException { private void copyMainClassApplication() throws IOException {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment