Skip to content

Commit 771517d

Browse files
committed
Ensure that jar verification runs on JDK 25
This commit ensures that the JAR verification task runs on JDK 25 as this feature has been introduced in https://bugs.openjdk.org/browse/JDK-8355940 Fixes spring-projectsgh-35777 See spring-projectsgh-35773
1 parent 388abf9 commit 771517d

3 files changed

Lines changed: 17 additions & 4 deletions

File tree

buildSrc/src/main/java/org/springframework/build/multirelease/MultiReleaseJarPlugin.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import org.gradle.api.tasks.TaskProvider;
3131
import org.gradle.api.tasks.bundling.AbstractArchiveTask;
3232
import org.gradle.jvm.tasks.Jar;
33+
import org.gradle.jvm.toolchain.JavaLanguageVersion;
3334
import org.gradle.jvm.toolchain.JavaToolchainService;
3435

3536
/**
@@ -62,8 +63,10 @@ public void apply(Project project) {
6263
tasks,
6364
dependencies,
6465
objects);
66+
6567
TaskProvider<MultiReleaseJarValidateTask> validateJarTask = tasks.register(VALIDATE_JAR_TASK_NAME, MultiReleaseJarValidateTask.class, (task) -> {
6668
task.getJar().set(tasks.named("jar", Jar.class).flatMap(AbstractArchiveTask::getArchiveFile));
69+
task.getJavaLauncher().set(task.getJavaToolchainService().launcherFor(spec -> spec.getLanguageVersion().set(JavaLanguageVersion.of(25))));
6770
});
6871
tasks.named("check", task -> task.dependsOn(validateJarTask));
6972
}

buildSrc/src/main/java/org/springframework/build/multirelease/MultiReleaseJarValidateTask.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,19 +22,26 @@
2222
import org.gradle.api.tasks.JavaExec;
2323
import org.gradle.api.tasks.PathSensitive;
2424
import org.gradle.api.tasks.PathSensitivity;
25+
import org.gradle.jvm.toolchain.JavaToolchainService;
2526

2627
import java.util.List;
2728

29+
import javax.inject.Inject;
30+
2831
@CacheableTask
2932
public abstract class MultiReleaseJarValidateTask extends JavaExec {
3033

31-
@InputFile
32-
@PathSensitive(PathSensitivity.RELATIVE)
33-
public abstract RegularFileProperty getJar();
3434

3535
public MultiReleaseJarValidateTask() {
3636
getMainModule().set("jdk.jartool");
3737
getArgumentProviders().add(() -> List.of("--validate", "--file", getJar().get().getAsFile().getAbsolutePath()));
3838
}
3939

40+
@Inject
41+
protected abstract JavaToolchainService getJavaToolchainService();
42+
43+
@InputFile
44+
@PathSensitive(PathSensitivity.RELATIVE)
45+
public abstract RegularFileProperty getJar();
46+
4047
}

buildSrc/src/test/java/org/springframework/build/multirelease/MultiReleaseJarPluginTests.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,9 @@ void validateJar() throws IOException {
126126
id 'org.springframework.build.multiReleaseJar'
127127
}
128128
version = '1.2.3'
129+
tasks.withType(JavaCompile).configureEach {
130+
options.release = 11
131+
}
129132
multiRelease { releaseVersions 17 }
130133
""");
131134
writeClass("src/main/java17", "Main.java", """
@@ -140,7 +143,7 @@ public class Main {}
140143
""");
141144
assertThatThrownBy(() ->runGradle("validateMultiReleaseJar"))
142145
.isInstanceOf(UnexpectedBuildFailure.class)
143-
.hasMessageContaining("entry: META-INF/versions/17/Main.class, has a class version incompatible with an earlier version");
146+
.hasMessageContaining("entry: META-INF/versions/17/Main.class, contains a class with different api from earlier version");
144147
}
145148

146149
private void writeBuildFile(String buildContent) throws IOException {

0 commit comments

Comments
 (0)