From d32ac97cafed073f62dabc04717980a295a09101 Mon Sep 17 00:00:00 2001 From: JesseBrault0709 <62299747+JesseBrault0709@users.noreply.github.com> Date: Thu, 30 May 2024 07:55:09 +0200 Subject: [PATCH] Improvements to gradle plugin, source set dependencies. --- ssg-gradle-model/build.gradle | 4 +++ ssg-gradle-plugin/build.gradle | 4 +++ .../ssg/gradle/SsgGradlePlugin.java | 34 +++++++++++++++---- 3 files changed, 35 insertions(+), 7 deletions(-) diff --git a/ssg-gradle-model/build.gradle b/ssg-gradle-model/build.gradle index a0ee5bf..35bb241 100644 --- a/ssg-gradle-model/build.gradle +++ b/ssg-gradle-model/build.gradle @@ -3,6 +3,10 @@ plugins { id 'maven-publish' } +java { + withSourcesJar() +} + publishing { publications { create('ssgGradleModel', MavenPublication) { diff --git a/ssg-gradle-plugin/build.gradle b/ssg-gradle-plugin/build.gradle index 0a403a5..c174e8a 100644 --- a/ssg-gradle-plugin/build.gradle +++ b/ssg-gradle-plugin/build.gradle @@ -17,6 +17,10 @@ gradlePlugin { } } +java { + withSourcesJar() +} + publishing { publications { create('ssgGradlePlugin', MavenPublication) { diff --git a/ssg-gradle-plugin/src/main/java/com/jessebrault/ssg/gradle/SsgGradlePlugin.java b/ssg-gradle-plugin/src/main/java/com/jessebrault/ssg/gradle/SsgGradlePlugin.java index b0d8c06..3be46c3 100644 --- a/ssg-gradle-plugin/src/main/java/com/jessebrault/ssg/gradle/SsgGradlePlugin.java +++ b/ssg-gradle-plugin/src/main/java/com/jessebrault/ssg/gradle/SsgGradlePlugin.java @@ -64,7 +64,12 @@ public class SsgGradlePlugin implements Plugin { return ssgCliConfiguration; } - protected void createDomainSourceSet(Project project, SourceSetContainer sourceSets, String name) { + protected void createDomainSourceSet( + Project project, + SourceSetContainer sourceSets, + String name, + List sourceSetDependencies + ) { sourceSets.create(name, sourceSet -> { // first, register the dirs // java @@ -101,10 +106,20 @@ public class SsgGradlePlugin implements Plugin { project.getTasks().named("ssgJars", ssgJarsTask -> { ssgJarsTask.dependsOn(jarTaskProvider); }); + + // fourth, configure dependencies on other source sets + project.getConfigurations().named(name + "Implementation").configure(configuration -> { + sourceSetDependencies.forEach(dependencySourceSetName -> { + final SourceSetOutput sourceSetOutput = + sourceSets.getByName(dependencySourceSetName).getOutput(); + final Dependency outputDependency = project.getDependencies().create(sourceSetOutput); + configuration.getDependencies().add(outputDependency); + }); + }); }); } - protected void createSsgSourceSet(SourceSetContainer sourceSets) { + protected void createSsgSourceSet(Project project, SourceSetContainer sourceSets) { sourceSets.create(SSG_SOURCE_SET, sourceSet -> { // groovy only sourceSet.getExtensions().getByType(GroovySourceDirectorySet.class).setSrcDirs(List.of(SSG_SOURCE_SET)); @@ -112,15 +127,18 @@ public class SsgGradlePlugin implements Plugin { sourceSet.getResources().setSrcDirs(List.of(SSG_SOURCE_SET)); // disable java sourceSet.getJava().setSrcDirs(List.of()); + // add dependency on main + final SourceSetOutput mainOutput = sourceSets.getByName("main").getOutput(); + project.getDependencies().add(SSG_SOURCE_SET + "Implementation", mainOutput); }); } protected void configureSourceSets(Project project) { final var javaExtension = project.getExtensions().getByType(JavaPluginExtension.class); final var sourceSets = javaExtension.getSourceSets(); - this.createDomainSourceSet(project, sourceSets, PAGES_SOURCE_SET); - this.createDomainSourceSet(project, sourceSets, COMPONENTS_SOURCE_SET); - this.createSsgSourceSet(sourceSets); + this.createSsgSourceSet(project, sourceSets); + this.createDomainSourceSet(project, sourceSets, COMPONENTS_SOURCE_SET, List.of("main")); + this.createDomainSourceSet(project, sourceSets, PAGES_SOURCE_SET, List.of("main", COMPONENTS_SOURCE_SET)); } // protected void configureCompileSsgGroovyTask(Project project) { @@ -177,8 +195,10 @@ public class SsgGradlePlugin implements Plugin { project.getPlugins().apply(JavaPlugin.class); project.getPlugins().apply(GroovyPlugin.class); - // create our ssgJars task, which is just a holder for source set jar tasks - project.getTasks().register("ssgJars"); + // create our ssgJars task, which is just a holder for source set jar tasks, including main + project.getTasks().register("ssgJars").configure(ssgJars -> { + ssgJars.dependsOn("jar"); // main + }); // configure the repositories, tooling models, and source sets this.configureRepositories(project);