Browse Source

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 gh-35777
See gh-35773
pull/34993/merge
Brian Clozel 1 month ago
parent
commit
771517dc36
  1. 3
      buildSrc/src/main/java/org/springframework/build/multirelease/MultiReleaseJarPlugin.java
  2. 13
      buildSrc/src/main/java/org/springframework/build/multirelease/MultiReleaseJarValidateTask.java
  3. 5
      buildSrc/src/test/java/org/springframework/build/multirelease/MultiReleaseJarPluginTests.java

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

@ -30,6 +30,7 @@ import org.gradle.api.tasks.TaskContainer;
import org.gradle.api.tasks.TaskProvider; import org.gradle.api.tasks.TaskProvider;
import org.gradle.api.tasks.bundling.AbstractArchiveTask; import org.gradle.api.tasks.bundling.AbstractArchiveTask;
import org.gradle.jvm.tasks.Jar; import org.gradle.jvm.tasks.Jar;
import org.gradle.jvm.toolchain.JavaLanguageVersion;
import org.gradle.jvm.toolchain.JavaToolchainService; import org.gradle.jvm.toolchain.JavaToolchainService;
/** /**
@ -62,8 +63,10 @@ public class MultiReleaseJarPlugin implements Plugin<Project> {
tasks, tasks,
dependencies, dependencies,
objects); objects);
TaskProvider<MultiReleaseJarValidateTask> validateJarTask = tasks.register(VALIDATE_JAR_TASK_NAME, MultiReleaseJarValidateTask.class, (task) -> { TaskProvider<MultiReleaseJarValidateTask> validateJarTask = tasks.register(VALIDATE_JAR_TASK_NAME, MultiReleaseJarValidateTask.class, (task) -> {
task.getJar().set(tasks.named("jar", Jar.class).flatMap(AbstractArchiveTask::getArchiveFile)); task.getJar().set(tasks.named("jar", Jar.class).flatMap(AbstractArchiveTask::getArchiveFile));
task.getJavaLauncher().set(task.getJavaToolchainService().launcherFor(spec -> spec.getLanguageVersion().set(JavaLanguageVersion.of(25))));
}); });
tasks.named("check", task -> task.dependsOn(validateJarTask)); tasks.named("check", task -> task.dependsOn(validateJarTask));
} }

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

@ -22,19 +22,26 @@ import org.gradle.api.tasks.InputFile;
import org.gradle.api.tasks.JavaExec; import org.gradle.api.tasks.JavaExec;
import org.gradle.api.tasks.PathSensitive; import org.gradle.api.tasks.PathSensitive;
import org.gradle.api.tasks.PathSensitivity; import org.gradle.api.tasks.PathSensitivity;
import org.gradle.jvm.toolchain.JavaToolchainService;
import java.util.List; import java.util.List;
import javax.inject.Inject;
@CacheableTask @CacheableTask
public abstract class MultiReleaseJarValidateTask extends JavaExec { public abstract class MultiReleaseJarValidateTask extends JavaExec {
@InputFile
@PathSensitive(PathSensitivity.RELATIVE)
public abstract RegularFileProperty getJar();
public MultiReleaseJarValidateTask() { public MultiReleaseJarValidateTask() {
getMainModule().set("jdk.jartool"); getMainModule().set("jdk.jartool");
getArgumentProviders().add(() -> List.of("--validate", "--file", getJar().get().getAsFile().getAbsolutePath())); getArgumentProviders().add(() -> List.of("--validate", "--file", getJar().get().getAsFile().getAbsolutePath()));
} }
@Inject
protected abstract JavaToolchainService getJavaToolchainService();
@InputFile
@PathSensitive(PathSensitivity.RELATIVE)
public abstract RegularFileProperty getJar();
} }

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

@ -126,6 +126,9 @@ public class MultiReleaseJarPluginTests {
id 'org.springframework.build.multiReleaseJar' id 'org.springframework.build.multiReleaseJar'
} }
version = '1.2.3' version = '1.2.3'
tasks.withType(JavaCompile).configureEach {
options.release = 11
}
multiRelease { releaseVersions 17 } multiRelease { releaseVersions 17 }
"""); """);
writeClass("src/main/java17", "Main.java", """ writeClass("src/main/java17", "Main.java", """
@ -140,7 +143,7 @@ public class MultiReleaseJarPluginTests {
"""); """);
assertThatThrownBy(() ->runGradle("validateMultiReleaseJar")) assertThatThrownBy(() ->runGradle("validateMultiReleaseJar"))
.isInstanceOf(UnexpectedBuildFailure.class) .isInstanceOf(UnexpectedBuildFailure.class)
.hasMessageContaining("entry: META-INF/versions/17/Main.class, has a class version incompatible with an earlier version"); .hasMessageContaining("entry: META-INF/versions/17/Main.class, contains a class with different api from earlier version");
} }
private void writeBuildFile(String buildContent) throws IOException { private void writeBuildFile(String buildContent) throws IOException {

Loading…
Cancel
Save