diff --git a/CHANGELOG.md b/CHANGELOG.md index e0bfda6e..c47bcc76 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ # Java Module Dependencies Gradle Plugin - Changelog ## Version 1.8 +* [#141](https://github.com/gradlex-org/java-module-dependencies/pull/141) Introduce `org.gradlex.java-module-dependencies.register-help-tasks` property * [#127](https://github.com/gradlex-org/java-module-dependencies/issues/127) Less configuration cache misses when modifying `module-info.java` (Thanks [TheGoesen](https://github.com/TheGoesen)) * [#128](https://github.com/gradlex-org/java-module-dependencies/issues/128) Less configuration cache misses when using Settings plugin (Thanks [TheGoesen](https://github.com/TheGoesen)) * [#135](https://github.com/gradlex-org/java-module-dependencies/issues/135) Improve performance of ApplyPluginsAction diff --git a/src/main/java/org/gradlex/javamodule/dependencies/JavaModuleDependenciesPlugin.java b/src/main/java/org/gradlex/javamodule/dependencies/JavaModuleDependenciesPlugin.java index eec98333..a50d8878 100644 --- a/src/main/java/org/gradlex/javamodule/dependencies/JavaModuleDependenciesPlugin.java +++ b/src/main/java/org/gradlex/javamodule/dependencies/JavaModuleDependenciesPlugin.java @@ -68,6 +68,7 @@ public abstract class JavaModuleDependenciesPlugin implements Plugin { private static final String EXTRA_JAVA_MODULE_INFO_PLUGIN_ID = "org.gradlex.extra-java-module-info"; + private static final String REGISTER_HELP_TASKS_PROPERTY = "org.gradlex.java-module-dependencies.register-help-tasks"; @Override public void apply(ExtensionAware projectOrSettings) { @@ -92,6 +93,10 @@ private void applyProject(Project project) { } private void setupForJavaProject(Project project, JavaModuleDependenciesExtension javaModuleDependencies) { + boolean registerHelpTasks = Boolean.parseBoolean(project.getProviders() + .gradleProperty(REGISTER_HELP_TASKS_PROPERTY) + .getOrElse("true")); + SourceSetContainer sourceSets = project.getExtensions().getByType(SourceSetContainer.class); sourceSets.all(sourceSet -> { process(REQUIRES, sourceSet.getImplementationConfigurationName(), sourceSet, project, javaModuleDependencies); @@ -103,21 +108,22 @@ private void setupForJavaProject(Project project, JavaModuleDependenciesExtensio javaModuleDependencies.doAddRequiresRuntimeSupport(sourceSet, sourceSet); }); - TaskProvider checkAllModuleInfo = project.getTasks().register("checkAllModuleInfo", t -> { + setupDirectivesDSL(project, javaModuleDependencies); + + TaskProvider checkAllModuleInfo = registerHelpTasks ? project.getTasks().register("checkAllModuleInfo", t -> { t.setGroup(VERIFICATION_GROUP); t.setDescription("Check scope and order of directives in 'module-info.java' files"); - }); + }) : null; - setupDirectivesDSL(project, javaModuleDependencies); - - setupOrderingCheckTasks(project, checkAllModuleInfo, javaModuleDependencies); - setupModuleDependenciesTask(project); - setupReportTasks(project, javaModuleDependencies); - setupMigrationTasks(project, javaModuleDependencies); + if (registerHelpTasks) { + setupOrderingCheckTasks(project, checkAllModuleInfo, javaModuleDependencies); + setupModuleDependenciesTask(project); + setupReportTasks(project, javaModuleDependencies); + setupMigrationTasks(project, javaModuleDependencies); + } - project.getPlugins().withId("com.autonomousapps.dependency-analysis", analysisPlugin -> { - DependencyAnalysisBridge.registerDependencyAnalysisPostProcessingTask(project, checkAllModuleInfo); - }); + project.getPlugins().withId("com.autonomousapps.dependency-analysis", analysisPlugin -> + DependencyAnalysisBridge.registerDependencyAnalysisPostProcessingTask(project, checkAllModuleInfo)); } private void setupExtraJavaModulePluginBridge(Project project, JavaModuleDependenciesExtension javaModuleDependencies) { @@ -143,17 +149,15 @@ private void setupDirectivesDSL(Project project, JavaModuleDependenciesExtension private void setupModuleDependenciesTask(Project project) { SourceSetContainer sourceSets = project.getExtensions().getByType(SourceSetContainer.class); TaskProvider moduleDependencies = project.getTasks().register("moduleDependencies", ModuleDependencyReport.class, t -> t.setGroup(HELP_GROUP)); - sourceSets.all(sourceSet -> { - moduleDependencies.configure(t -> { - HashSet joined = new HashSet<>(); - if (t.getConfigurations() != null) { - joined.addAll(t.getConfigurations()); - } - joined.add(project.getConfigurations().getByName(sourceSet.getCompileClasspathConfigurationName())); - joined.add(project.getConfigurations().getByName(sourceSet.getRuntimeClasspathConfigurationName())); - t.setConfigurations(joined); - }); - }); + sourceSets.all(sourceSet -> moduleDependencies.configure(t -> { + HashSet joined = new HashSet<>(); + if (t.getConfigurations() != null) { + joined.addAll(t.getConfigurations()); + } + joined.add(project.getConfigurations().getByName(sourceSet.getCompileClasspathConfigurationName())); + joined.add(project.getConfigurations().getByName(sourceSet.getRuntimeClasspathConfigurationName())); + t.setConfigurations(joined); + })); } private void setupReportTasks(Project project, JavaModuleDependenciesExtension javaModuleDependencies) { diff --git a/src/main/java/org/gradlex/javamodule/dependencies/internal/bridges/DependencyAnalysisBridge.java b/src/main/java/org/gradlex/javamodule/dependencies/internal/bridges/DependencyAnalysisBridge.java index 6c9da1a5..c8849728 100644 --- a/src/main/java/org/gradlex/javamodule/dependencies/internal/bridges/DependencyAnalysisBridge.java +++ b/src/main/java/org/gradlex/javamodule/dependencies/internal/bridges/DependencyAnalysisBridge.java @@ -26,11 +26,12 @@ import org.gradlex.javamodule.dependencies.tasks.ModuleDirectivesOrderingCheck; import org.gradlex.javamodule.dependencies.tasks.ModuleDirectivesScopeCheck; +import javax.annotation.Nullable; import java.io.File; public class DependencyAnalysisBridge { - public static void registerDependencyAnalysisPostProcessingTask(Project project, TaskProvider checkAllModuleInfo) { + public static void registerDependencyAnalysisPostProcessingTask(Project project, @Nullable TaskProvider checkAllModuleInfo) { TaskContainer tasks = project.getTasks(); SourceSetContainer sourceSets = project.getExtensions().getByType(SourceSetContainer.class); @@ -54,7 +55,9 @@ public static void registerDependencyAnalysisPostProcessingTask(Project project, project.getExtensions().getByType(AbstractExtension.class) .registerPostProcessingTask(checkModuleDirectivesScope); - checkAllModuleInfo.configure(t -> t.dependsOn(checkModuleDirectivesScope)); + if (checkAllModuleInfo != null) { + checkAllModuleInfo.configure(t -> t.dependsOn(checkModuleDirectivesScope)); + } tasks.withType(ModuleDirectivesOrderingCheck.class).configureEach(t -> t.mustRunAfter(checkModuleDirectivesScope)); } } diff --git a/src/test/groovy/org/gradlex/javamodule/dependencies/test/BasicFunctionalityTest.groovy b/src/test/groovy/org/gradlex/javamodule/dependencies/test/BasicFunctionalityTest.groovy index accfa72d..c5cee559 100644 --- a/src/test/groovy/org/gradlex/javamodule/dependencies/test/BasicFunctionalityTest.groovy +++ b/src/test/groovy/org/gradlex/javamodule/dependencies/test/BasicFunctionalityTest.groovy @@ -6,7 +6,7 @@ import spock.lang.Specification class BasicFunctionalityTest extends Specification { @Delegate - GradleBuild build = new GradleBuild() + GradleBuild build = new GradleBuild(true) def "can configure all tasks in a build without error"() { given: diff --git a/src/test/groovy/org/gradlex/javamodule/dependencies/test/OrderingCheckTest.groovy b/src/test/groovy/org/gradlex/javamodule/dependencies/test/OrderingCheckTest.groovy index 4365b8f5..d10d2d9e 100644 --- a/src/test/groovy/org/gradlex/javamodule/dependencies/test/OrderingCheckTest.groovy +++ b/src/test/groovy/org/gradlex/javamodule/dependencies/test/OrderingCheckTest.groovy @@ -6,7 +6,7 @@ import spock.lang.Specification class OrderingCheckTest extends Specification { @Delegate - GradleBuild build = new GradleBuild() + GradleBuild build = new GradleBuild(true) def "order is expected to be alphabetic for each scope individually"() { when: diff --git a/src/test/groovy/org/gradlex/javamodule/dependencies/test/fixture/GradleBuild.groovy b/src/test/groovy/org/gradlex/javamodule/dependencies/test/fixture/GradleBuild.groovy index 7342f02f..451f38fd 100644 --- a/src/test/groovy/org/gradlex/javamodule/dependencies/test/fixture/GradleBuild.groovy +++ b/src/test/groovy/org/gradlex/javamodule/dependencies/test/fixture/GradleBuild.groovy @@ -8,6 +8,7 @@ import java.nio.file.Files class GradleBuild { + final boolean withHelpTasks final File projectDir final File settingsFile final File appBuildFile @@ -17,7 +18,8 @@ class GradleBuild { final String gradleVersionUnderTest = System.getProperty("gradleVersionUnderTest") - GradleBuild(File projectDir = Files.createTempDirectory("gradle-build").toFile()) { + GradleBuild(boolean withHelpTasks = false, File projectDir = Files.createTempDirectory("gradle-build").toFile()) { + this.withHelpTasks = withHelpTasks this.projectDir = projectDir this.settingsFile = file("settings.gradle.kts") this.appBuildFile = file("app/build.gradle.kts") @@ -98,7 +100,8 @@ class GradleBuild { .forwardOutput() .withPluginClasspath() .withProjectDir(projectDir) - .withArguments(Arrays.asList(args) + latestFeaturesArgs + '-s' + '--warning-mode=all') + .withArguments(Arrays.asList(args) + latestFeaturesArgs + '-s' + '--warning-mode=all' + + "-Porg.gradlex.java-module-dependencies.register-help-tasks=$withHelpTasks".toString()) .withDebug(ManagementFactory.getRuntimeMXBean().getInputArguments().toString().contains("-agentlib:jdwp")).with { gradleVersionUnderTest ? it.withGradleVersion(gradleVersionUnderTest) : it }