diff --git a/src/main/java/org/javamodularity/moduleplugin/ModuleName.java b/src/main/java/org/javamodularity/moduleplugin/ModuleName.java index da80c28..7e56ab4 100644 --- a/src/main/java/org/javamodularity/moduleplugin/ModuleName.java +++ b/src/main/java/org/javamodularity/moduleplugin/ModuleName.java @@ -9,7 +9,9 @@ import org.gradle.api.logging.Logger; import org.gradle.api.logging.Logging; import org.gradle.api.plugins.JavaPluginConvention; +import org.gradle.api.plugins.JavaPluginExtension; import org.gradle.api.tasks.SourceSet; +import org.gradle.util.GradleVersion; import java.io.IOException; import java.nio.file.Files; @@ -23,8 +25,15 @@ class ModuleName { Optional findModuleName(Project project) { SourceSet main; try { - JavaPluginConvention javaConvention = project.getConvention().getPlugin(JavaPluginConvention.class); - main = javaConvention.getSourceSets().getByName(SourceSet.MAIN_SOURCE_SET_NAME); + if (GradleVersion.current().compareTo(GradleVersion.version("7.1")) >= 0) { + // JavaPluginExtension#getSourceSets() is supported from Gradle 7.1 + // https://docs.gradle.org/7.1/javadoc/org/gradle/api/plugins/JavaPluginExtension.html#getSourceSets-- + JavaPluginExtension javaPluginExtension = project.getExtensions().getByType(JavaPluginExtension.class); + main = javaPluginExtension.getSourceSets().getByName(SourceSet.MAIN_SOURCE_SET_NAME); + } else { + JavaPluginConvention javaConvention = project.getConvention().getPlugin(JavaPluginConvention.class); + main = javaConvention.getSourceSets().getByName(SourceSet.MAIN_SOURCE_SET_NAME); + } } catch (IllegalStateException | UnknownDomainObjectException e) { LOGGER.warn("Cannot obtain JavaPluginConvention", e); return Optional.empty(); diff --git a/src/main/java/org/javamodularity/moduleplugin/tasks/CompileModuleInfoTask.java b/src/main/java/org/javamodularity/moduleplugin/tasks/CompileModuleInfoTask.java index caa748c..3e74280 100644 --- a/src/main/java/org/javamodularity/moduleplugin/tasks/CompileModuleInfoTask.java +++ b/src/main/java/org/javamodularity/moduleplugin/tasks/CompileModuleInfoTask.java @@ -59,7 +59,15 @@ public void execute(Task task) { File moduleInfoDir = helper().getModuleInfoDir(); jar.from(moduleInfoDir); jar.doFirst(task -> { - File classesDir = helper().mainSourceSet().getJava().getOutputDir(); + File classesDir; + if (GradleVersion.current().compareTo(GradleVersion.version("6.1")) >= 0) { + // SourceDirectorySet#getClassesDirectory() is supported from Gradle 6.1 + // https://docs.gradle.org/6.1/javadoc/org/gradle/api/file/SourceDirectorySet.html#getClassesDirectory-- + classesDir = helper().mainSourceSet().getJava().getClassesDirectory().get().getAsFile(); + } else { + classesDir = helper().mainSourceSet().getJava().getOutputDir(); + } + File mainModuleInfoFile = new File(classesDir, "module-info.class"); File customModuleInfoFile = new File(moduleInfoDir, "module-info.class"); if(mainModuleInfoFile.isFile() && customModuleInfoFile.isFile()) { @@ -82,7 +90,13 @@ private JavaCompile preconfigureCompileModuleInfoJava(JavaCompile compileJava) { compileModuleInfoJava.setSource(pathToModuleInfoJava()); compileModuleInfoJava.getOptions().setSourcepath(project.files(pathToModuleInfoJava().getParent())); - compileModuleInfoJava.setDestinationDir(helper().getModuleInfoDir()); + if (GradleVersion.current().compareTo(GradleVersion.version("6.1")) >= 0) { + // AbstractCompile#getDestinationDirectory() is supported from Gradle 6.1 + // https://docs.gradle.org/6.1/javadoc/org/gradle/api/tasks/compile/AbstractCompile.html#getDestinationDirectory-- + compileModuleInfoJava.getDestinationDirectory().set(helper().getModuleInfoDir()); + } else { + compileModuleInfoJava.setDestinationDir(helper().getModuleInfoDir()); + } // we need all the compiled classes before compiling module-info.java compileModuleInfoJava.dependsOn(compileJava); diff --git a/src/test/java/org/javamodularity/moduleplugin/ModulePluginSmokeTest.java b/src/test/java/org/javamodularity/moduleplugin/ModulePluginSmokeTest.java index 73ede30..f1f0a7b 100644 --- a/src/test/java/org/javamodularity/moduleplugin/ModulePluginSmokeTest.java +++ b/src/test/java/org/javamodularity/moduleplugin/ModulePluginSmokeTest.java @@ -38,7 +38,7 @@ void before() throws IOException { @CartesianProductTest(name = "smokeTest({arguments})") @CartesianValueSource(strings = {"test-project", "test-project-kotlin", "test-project-groovy"}) - @CartesianValueSource(strings = {"5.1", "5.6", "6.3", "6.4.1", "6.5.1", "6.8.3", "7.0"}) + @CartesianValueSource(strings = {"5.1", "5.6", "6.3", "6.4.1", "6.5.1", "6.8.3", "7.0", "7.1", "7.2"}) void smokeTest(String projectName, String gradleVersion) { LOGGER.info("Executing smokeTest with Gradle {}", gradleVersion); var result = GradleRunner.create()