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; @@ -30,6 +30,7 @@ import org.gradle.api.tasks.TaskContainer;
import org.gradle.api.tasks.TaskProvider;
import org.gradle.api.tasks.bundling.AbstractArchiveTask;
import org.gradle.jvm.tasks.Jar;
import org.gradle.jvm.toolchain.JavaLanguageVersion;
import org.gradle.jvm.toolchain.JavaToolchainService;
/**
@ -62,8 +63,10 @@ public class MultiReleaseJarPlugin implements Plugin<Project> { @@ -62,8 +63,10 @@ public class MultiReleaseJarPlugin implements Plugin<Project> {
tasks,
dependencies,
objects);
TaskProvider<MultiReleaseJarValidateTask> validateJarTask = tasks.register(VALIDATE_JAR_TASK_NAME, MultiReleaseJarValidateTask.class, (task) -> {
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));
}

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

@ -22,19 +22,26 @@ import org.gradle.api.tasks.InputFile; @@ -22,19 +22,26 @@ import org.gradle.api.tasks.InputFile;
import org.gradle.api.tasks.JavaExec;
import org.gradle.api.tasks.PathSensitive;
import org.gradle.api.tasks.PathSensitivity;
import org.gradle.jvm.toolchain.JavaToolchainService;
import java.util.List;
import javax.inject.Inject;
@CacheableTask
public abstract class MultiReleaseJarValidateTask extends JavaExec {
@InputFile
@PathSensitive(PathSensitivity.RELATIVE)
public abstract RegularFileProperty getJar();
public MultiReleaseJarValidateTask() {
getMainModule().set("jdk.jartool");
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 { @@ -126,6 +126,9 @@ public class MultiReleaseJarPluginTests {
id 'org.springframework.build.multiReleaseJar'
}
version = '1.2.3'
tasks.withType(JavaCompile).configureEach {
options.release = 11
}
multiRelease { releaseVersions 17 }
""");
writeClass("src/main/java17", "Main.java", """
@ -140,7 +143,7 @@ public class MultiReleaseJarPluginTests { @@ -140,7 +143,7 @@ public class MultiReleaseJarPluginTests {
""");
assertThatThrownBy(() ->runGradle("validateMultiReleaseJar"))
.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 {

Loading…
Cancel
Save