From 6aec34a188b4a55240fd50f78aedd13fc14f59b6 Mon Sep 17 00:00:00 2001 From: Lars Grefer Date: Tue, 15 Feb 2022 03:08:52 +0100 Subject: [PATCH] Improve configuration-cache support fixes #384 --- .../gradle/plugins/aspectj/AjcAction.java | 14 ++++++++----- .../plugins/aspectj/AspectjCompile.java | 21 ++++++++++++++----- .../codegenerator/GenerateCodeTask.java | 15 ++++++------- .../gradle/plugins/jsass/PrepareWebjars.java | 21 ++++++++++++++----- .../gradle/plugins/lombok/tasks/Delombok.java | 20 +++++++++++++++--- .../plugins/lombok/tasks/LombokApiJar.java | 18 +++++++++++++--- .../plugins/lombok/tasks/LombokConfig.java | 19 +++++++++++++---- .../lombok/tasks/LombokRuntimeJar.java | 14 +++++++++++-- .../plugins/lombok/tasks/PostCompile.java | 14 ++++++++++++- .../plugins/maven/war/WarOverlayPlugin.java | 18 +++++++++------- .../gradle/plugins/mkdocs/tasks/MkDocs.java | 9 ++++++-- .../plugins/mkdocs/tasks/MkDocsBuild.java | 8 +++++-- .../plugins/mkdocs/tasks/MkDocsGhDeploy.java | 8 +++++-- .../plugins/mkdocs/tasks/MkDocsNew.java | 9 ++++---- .../plugins/mkdocs/tasks/MkDocsServe.java | 9 ++++---- 15 files changed, 161 insertions(+), 56 deletions(-) diff --git a/aspectj-plugin/src/main/java/io/freefair/gradle/plugins/aspectj/AjcAction.java b/aspectj-plugin/src/main/java/io/freefair/gradle/plugins/aspectj/AjcAction.java index ff910919..805d4003 100644 --- a/aspectj-plugin/src/main/java/io/freefair/gradle/plugins/aspectj/AjcAction.java +++ b/aspectj-plugin/src/main/java/io/freefair/gradle/plugins/aspectj/AjcAction.java @@ -8,6 +8,7 @@ import org.gradle.api.NonNullApi; import org.gradle.api.Task; import org.gradle.api.file.ConfigurableFileCollection; +import org.gradle.api.file.ProjectLayout; import org.gradle.api.model.ObjectFactory; import org.gradle.api.provider.Property; import org.gradle.api.tasks.ClasspathNormalizer; @@ -26,6 +27,11 @@ @NonNullApi public class AjcAction implements Action { + @Getter(AccessLevel.NONE) + private final ProjectLayout projectLayout; + @Getter(AccessLevel.NONE) + private final JavaExecHandleFactory javaExecHandleFactory; + private final ConfigurableFileCollection classpath; private final Property enabled; @@ -38,11 +44,9 @@ public void options(Action action) { action.execute(getOptions()); } - @Getter(AccessLevel.NONE) - private final JavaExecHandleFactory javaExecHandleFactory; - @Inject - public AjcAction(ObjectFactory objectFactory, JavaExecHandleFactory javaExecHandleFactory) { + public AjcAction(ProjectLayout projectLayout, ObjectFactory objectFactory, JavaExecHandleFactory javaExecHandleFactory) { + this.projectLayout = projectLayout; options = new AspectJCompileOptions(objectFactory); classpath = objectFactory.fileCollection(); additionalInpath = objectFactory.fileCollection(); @@ -93,7 +97,7 @@ private AspectJCompileSpec createSpec(AbstractCompile compile) { AspectJCompileSpec spec = new AspectJCompileSpec(); spec.setDestinationDir(compile.getDestinationDirectory().get().getAsFile()); - spec.setWorkingDir(compile.getProject().getProjectDir()); + spec.setWorkingDir(projectLayout.getProjectDirectory().getAsFile()); spec.setTempDir(compile.getTemporaryDir()); spec.setCompileClasspath(new ArrayList<>(compile.getClasspath().filter(File::exists).getFiles())); spec.setTargetCompatibility(compile.getTargetCompatibility()); diff --git a/aspectj-plugin/src/main/java/io/freefair/gradle/plugins/aspectj/AspectjCompile.java b/aspectj-plugin/src/main/java/io/freefair/gradle/plugins/aspectj/AspectjCompile.java index aa8e56fe..11fe6bf5 100644 --- a/aspectj-plugin/src/main/java/io/freefair/gradle/plugins/aspectj/AspectjCompile.java +++ b/aspectj-plugin/src/main/java/io/freefair/gradle/plugins/aspectj/AspectjCompile.java @@ -2,22 +2,27 @@ import io.freefair.gradle.plugins.aspectj.internal.AspectJCompileSpec; import io.freefair.gradle.plugins.aspectj.internal.AspectJCompiler; +import lombok.AccessLevel; import lombok.Getter; import org.gradle.api.Action; -import org.gradle.api.file.ConfigurableFileCollection; -import org.gradle.api.file.FileCollection; -import org.gradle.api.file.FileTree; +import org.gradle.api.file.*; import org.gradle.api.tasks.*; import org.gradle.api.tasks.compile.AbstractCompile; import org.gradle.api.tasks.compile.CompileOptions; import org.gradle.process.internal.JavaExecHandleFactory; +import javax.inject.Inject; import java.util.ArrayList; @Getter @CacheableTask public class AspectjCompile extends AbstractCompile { + @Getter(AccessLevel.NONE) + private final FileSystemOperations fileSystemOperations; + @Getter(AccessLevel.NONE) + private final ProjectLayout projectLayout; + @Classpath private final ConfigurableFileCollection aspectjClasspath = getProject().getObjects().fileCollection(); @@ -27,6 +32,12 @@ public class AspectjCompile extends AbstractCompile { @Nested private final AspectJCompileOptions ajcOptions = getProject().getObjects().newInstance(AspectJCompileOptions.class); + @Inject + public AspectjCompile(FileSystemOperations fileSystemOperations, ProjectLayout projectLayout) { + this.fileSystemOperations = fileSystemOperations; + this.projectLayout = projectLayout; + } + /** * {@inheritDoc} */ @@ -46,7 +57,7 @@ public FileCollection getClasspath() { @TaskAction protected void compile() { - getProject().delete(getDestinationDirectory()); + fileSystemOperations.delete(spec -> spec.delete(getDestinationDirectory()).setFollowSymlinks(false)); AspectJCompileSpec spec = createSpec(); WorkResult result = getCompiler().execute(spec); @@ -61,7 +72,7 @@ private AspectJCompileSpec createSpec() { AspectJCompileSpec spec = new AspectJCompileSpec(); spec.setSourceFiles(getSource()); spec.setDestinationDir(getDestinationDirectory().getAsFile().get()); - spec.setWorkingDir(getProject().getProjectDir()); + spec.setWorkingDir(projectLayout.getProjectDirectory().getAsFile()); spec.setTempDir(getTemporaryDir()); spec.setCompileClasspath(new ArrayList<>(getClasspath().getFiles())); spec.setSourceCompatibility(getSourceCompatibility()); diff --git a/code-generator-plugin/src/main/java/io/freefair/gradle/plugin/codegenerator/GenerateCodeTask.java b/code-generator-plugin/src/main/java/io/freefair/gradle/plugin/codegenerator/GenerateCodeTask.java index 9fd3c5bd..769c413a 100644 --- a/code-generator-plugin/src/main/java/io/freefair/gradle/plugin/codegenerator/GenerateCodeTask.java +++ b/code-generator-plugin/src/main/java/io/freefair/gradle/plugin/codegenerator/GenerateCodeTask.java @@ -7,14 +7,12 @@ import io.github.classgraph.ClassInfo; import io.github.classgraph.ClassInfoList; import io.github.classgraph.ScanResult; -import lombok.Getter; -import lombok.RequiredArgsConstructor; -import lombok.Setter; -import lombok.SneakyThrows; +import lombok.*; import lombok.extern.slf4j.Slf4j; import org.gradle.api.DefaultTask; import org.gradle.api.file.ConfigurableFileCollection; import org.gradle.api.file.DirectoryProperty; +import org.gradle.api.file.ProjectLayout; import org.gradle.api.provider.MapProperty; import org.gradle.api.provider.Property; import org.gradle.api.tasks.*; @@ -28,7 +26,9 @@ @Setter public class GenerateCodeTask extends DefaultTask { - @Internal + @Getter(AccessLevel.NONE) + private final ProjectLayout projectLayout; + @Getter(AccessLevel.NONE) private final WorkerExecutor workerExecutor; @InputDirectory @@ -50,7 +50,8 @@ public class GenerateCodeTask extends DefaultTask { private final ConfigurableFileCollection codeGeneratorClasspath = getProject().files(); @Inject - public GenerateCodeTask(WorkerExecutor workerExecutor) { + public GenerateCodeTask(ProjectLayout projectLayout, WorkerExecutor workerExecutor) { + this.projectLayout = projectLayout; this.workerExecutor = workerExecutor; } @@ -72,7 +73,7 @@ public void generate() { getLogger().debug(classesImplementing.stream().map(ClassInfo::getName).collect(Collectors.joining(","))); } - ProjectContext context = new ProjectContext(getProject().getProjectDir(), inputDir.getAsFile().getOrElse(this.getTemporaryDir()), outputDir.getAsFile().get(), configurationValues.getOrElse(Collections.emptyMap()), sourceSet.getOrElse("none")); + ProjectContext context = new ProjectContext(projectLayout.getProjectDirectory().getAsFile(), inputDir.getAsFile().getOrElse(this.getTemporaryDir()), outputDir.getAsFile().get(), configurationValues.getOrElse(Collections.emptyMap()), sourceSet.getOrElse("none")); WorkQueue workQueue = workerExecutor.classLoaderIsolation(spec -> spec.getClasspath().from(codeGeneratorClasspath)); diff --git a/jsass-plugin/src/main/java/io/freefair/gradle/plugins/jsass/PrepareWebjars.java b/jsass-plugin/src/main/java/io/freefair/gradle/plugins/jsass/PrepareWebjars.java index 056921ac..04e6f480 100644 --- a/jsass-plugin/src/main/java/io/freefair/gradle/plugins/jsass/PrepareWebjars.java +++ b/jsass-plugin/src/main/java/io/freefair/gradle/plugins/jsass/PrepareWebjars.java @@ -1,13 +1,13 @@ package io.freefair.gradle.plugins.jsass; +import lombok.AccessLevel; import lombok.Getter; import lombok.Setter; import org.gradle.api.DefaultTask; -import org.gradle.api.file.ConfigurableFileCollection; -import org.gradle.api.file.DirectoryProperty; -import org.gradle.api.file.DuplicatesStrategy; +import org.gradle.api.file.*; import org.gradle.api.tasks.*; +import javax.inject.Inject; import java.io.File; @Getter @@ -15,6 +15,11 @@ @Deprecated public class PrepareWebjars extends DefaultTask { + @Getter(AccessLevel.NONE) + private final FileSystemOperations fileSystemOperations; + @Getter(AccessLevel.NONE) + private final ArchiveOperations archiveOperations; + @OutputDirectory private final DirectoryProperty outputDirectory = getProject().getObjects().directoryProperty(); @@ -22,15 +27,21 @@ public class PrepareWebjars extends DefaultTask { @PathSensitive(PathSensitivity.NAME_ONLY) private final ConfigurableFileCollection webjars = getProject().files(); + @Inject + public PrepareWebjars(FileSystemOperations fileSystemOperations, ArchiveOperations archiveOperations) { + this.fileSystemOperations = fileSystemOperations; + this.archiveOperations = archiveOperations; + } + @TaskAction public void extractWebjars() { - getProject().sync(sync -> { + fileSystemOperations.sync(sync -> { sync.into(outputDirectory); sync.setDuplicatesStrategy(DuplicatesStrategy.WARN); webjars.filter(File::isFile).getFiles().forEach(file -> - sync.from(getProject().zipTree(file), jarSpec -> { + sync.from(archiveOperations.zipTree(file), jarSpec -> { jarSpec.include("META-INF/resources/webjars/**"); jarSpec.setIncludeEmptyDirs(false); jarSpec.eachFile(fcd -> fcd.setPath(fcd.getPath().replaceFirst("META-INF/resources/webjars/(.*?)/(.*?)/", "$1/"))); diff --git a/lombok-plugin/src/main/java/io/freefair/gradle/plugins/lombok/tasks/Delombok.java b/lombok-plugin/src/main/java/io/freefair/gradle/plugins/lombok/tasks/Delombok.java index f0671a2e..2f3c0fdb 100644 --- a/lombok-plugin/src/main/java/io/freefair/gradle/plugins/lombok/tasks/Delombok.java +++ b/lombok-plugin/src/main/java/io/freefair/gradle/plugins/lombok/tasks/Delombok.java @@ -1,17 +1,20 @@ package io.freefair.gradle.plugins.lombok.tasks; +import lombok.AccessLevel; import lombok.Getter; import lombok.Setter; import org.gradle.api.DefaultTask; import org.gradle.api.file.ConfigurableFileCollection; import org.gradle.api.file.DirectoryProperty; +import org.gradle.api.file.FileSystemOperations; import org.gradle.api.file.FileTree; import org.gradle.api.internal.file.FileTreeInternal; import org.gradle.api.internal.file.UnionFileTree; import org.gradle.api.provider.Property; import org.gradle.api.tasks.*; -import org.gradle.util.GUtil; +import org.gradle.process.ExecOperations; +import javax.inject.Inject; import java.io.File; import java.io.IOException; import java.nio.file.Files; @@ -26,6 +29,11 @@ @CacheableTask public class Delombok extends DefaultTask implements LombokTask { + @Getter(AccessLevel.NONE) + private final FileSystemOperations fileSystemOperations; + @Getter(AccessLevel.NONE) + private final ExecOperations execOperations; + /** * Print the name of each file as it is being delombok-ed. */ @@ -111,6 +119,12 @@ public class Delombok extends DefaultTask implements LombokTask { @Internal private final ConfigurableFileCollection input = getProject().files(); + @Inject + public Delombok(FileSystemOperations fileSystemOperations, ExecOperations execOperations) { + this.fileSystemOperations = fileSystemOperations; + this.execOperations = execOperations; + } + @InputFiles @PathSensitive(PathSensitivity.RELATIVE) @SkipWhenEmpty @@ -127,7 +141,7 @@ protected FileTree getFilteredInput() { @TaskAction public void delombok() throws IOException { - getProject().delete(getTarget().getAsFile().get()); + fileSystemOperations.delete(spec -> spec.delete(getTarget()).setFollowSymlinks(false)); List args = new LinkedList<>(); @@ -175,7 +189,7 @@ public void delombok() throws IOException { Files.write(optionsFile.toPath(), args); - getProject().javaexec(delombok -> { + execOperations.javaexec(delombok -> { delombok.setClasspath(getLombokClasspath()); delombok.getMainClass().set("lombok.launch.Main"); delombok.args("delombok"); diff --git a/lombok-plugin/src/main/java/io/freefair/gradle/plugins/lombok/tasks/LombokApiJar.java b/lombok-plugin/src/main/java/io/freefair/gradle/plugins/lombok/tasks/LombokApiJar.java index f7c7d356..e19135c4 100644 --- a/lombok-plugin/src/main/java/io/freefair/gradle/plugins/lombok/tasks/LombokApiJar.java +++ b/lombok-plugin/src/main/java/io/freefair/gradle/plugins/lombok/tasks/LombokApiJar.java @@ -1,10 +1,14 @@ package io.freefair.gradle.plugins.lombok.tasks; +import lombok.AccessLevel; import lombok.Getter; import org.gradle.api.NonNullApi; +import org.gradle.api.file.FileSystemOperations; +import org.gradle.api.internal.ProcessOperations; import org.gradle.api.tasks.CacheableTask; import org.gradle.api.tasks.TaskAction; +import javax.inject.Inject; import java.io.File; /** @@ -19,16 +23,24 @@ @CacheableTask public class LombokApiJar extends LombokJarTask { - public LombokApiJar() { + @Getter(AccessLevel.NONE) + private final FileSystemOperations fileSystemOperations; + @Getter(AccessLevel.NONE) + private final ProcessOperations processOperations; + + @Inject + public LombokApiJar(FileSystemOperations fileSystemOperations, ProcessOperations processOperations) { + this.fileSystemOperations = fileSystemOperations; + this.processOperations = processOperations; getArchiveAppendix().convention("api"); } @TaskAction public void copy() { - getProject().delete(getArchiveFile()); + fileSystemOperations.delete(spec -> spec.delete(getArchiveFile()).setFollowSymlinks(false)); File destinationDir = getDestinationDirectory().getAsFile().get(); - getProject().javaexec(apiJar -> { + processOperations.javaexec(apiJar -> { apiJar.setClasspath(getLombokClasspath()); apiJar.getMainClass().set("lombok.launch.Main"); apiJar.args("publicApi", destinationDir.getAbsolutePath()); diff --git a/lombok-plugin/src/main/java/io/freefair/gradle/plugins/lombok/tasks/LombokConfig.java b/lombok-plugin/src/main/java/io/freefair/gradle/plugins/lombok/tasks/LombokConfig.java index ca26e71e..cf005395 100644 --- a/lombok-plugin/src/main/java/io/freefair/gradle/plugins/lombok/tasks/LombokConfig.java +++ b/lombok-plugin/src/main/java/io/freefair/gradle/plugins/lombok/tasks/LombokConfig.java @@ -1,14 +1,18 @@ package io.freefair.gradle.plugins.lombok.tasks; +import lombok.AccessLevel; import lombok.Getter; import lombok.Setter; import org.gradle.api.DefaultTask; import org.gradle.api.file.ConfigurableFileCollection; +import org.gradle.api.file.FileSystemOperations; import org.gradle.api.file.RegularFileProperty; import org.gradle.api.provider.ListProperty; import org.gradle.api.provider.Property; import org.gradle.api.tasks.*; +import org.gradle.process.ExecOperations; +import javax.inject.Inject; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; @@ -22,6 +26,11 @@ @UntrackedTask(because = "lombok config bubbling traverses the file system") public class LombokConfig extends DefaultTask implements LombokTask { + @Getter(AccessLevel.NONE) + private final FileSystemOperations fileSystemOperations; + @Getter(AccessLevel.NONE) + private final ExecOperations execOperations; + @Classpath private final ConfigurableFileCollection lombokClasspath = getProject().files(); @@ -60,14 +69,16 @@ public class LombokConfig extends DefaultTask implements LombokTask { @OutputFile private final RegularFileProperty outputFile = getProject().getObjects().fileProperty(); - public LombokConfig() { + @Inject + public LombokConfig(FileSystemOperations fileSystemOperations, ExecOperations execOperations) { + this.fileSystemOperations = fileSystemOperations; + this.execOperations = execOperations; getOutputs().upToDateWhen(t -> ((LombokConfig) t).getPaths().isEmpty()); } @TaskAction public void exec() throws IOException { - - getProject().delete(outputFile); + fileSystemOperations.delete(spec -> spec.delete(outputFile).setFollowSymlinks(false)); List actualPaths = paths.getFiles() .stream() @@ -81,7 +92,7 @@ public void exec() throws IOException { try (OutputStream out = new FileOutputStream(outputFile.getAsFile().get())) { - getProject().javaexec(config -> { + execOperations.javaexec(config -> { config.setClasspath(getLombokClasspath()); config.getMainClass().set("lombok.launch.Main"); config.args("config"); diff --git a/lombok-plugin/src/main/java/io/freefair/gradle/plugins/lombok/tasks/LombokRuntimeJar.java b/lombok-plugin/src/main/java/io/freefair/gradle/plugins/lombok/tasks/LombokRuntimeJar.java index d1401856..f2d6e3b3 100644 --- a/lombok-plugin/src/main/java/io/freefair/gradle/plugins/lombok/tasks/LombokRuntimeJar.java +++ b/lombok-plugin/src/main/java/io/freefair/gradle/plugins/lombok/tasks/LombokRuntimeJar.java @@ -1,11 +1,16 @@ package io.freefair.gradle.plugins.lombok.tasks; +import lombok.AccessLevel; import lombok.Getter; import org.gradle.api.NonNullApi; +import org.gradle.api.file.FileSystemOperations; import org.gradle.api.provider.Property; import org.gradle.api.tasks.CacheableTask; import org.gradle.api.tasks.Console; import org.gradle.api.tasks.Input; +import org.gradle.process.ExecOperations; + +import javax.inject.Inject; /** * Creates a small lombok-runtime.jar with the runtime @@ -20,6 +25,9 @@ @CacheableTask public class LombokRuntimeJar extends LombokJarTask { + @Getter(AccessLevel.NONE) + private final ExecOperations execOperations; + /** * Prints those lombok transformations that require lombok-runtime.jar. */ @@ -32,13 +40,15 @@ public class LombokRuntimeJar extends LombokJarTask { @Input private final Property create = getProject().getObjects().property(Boolean.class).convention(true); - public LombokRuntimeJar() { + @Inject + public LombokRuntimeJar(ExecOperations execOperations) { + this.execOperations = execOperations; getArchiveAppendix().convention("runtime"); } @Override public void copy() { - getProject().javaexec(runtimeJar -> { + execOperations.javaexec(runtimeJar -> { runtimeJar.setClasspath(getLombokClasspath()); runtimeJar.getMainClass().set("lombok.launch.Main"); runtimeJar.args("createRuntime"); diff --git a/lombok-plugin/src/main/java/io/freefair/gradle/plugins/lombok/tasks/PostCompile.java b/lombok-plugin/src/main/java/io/freefair/gradle/plugins/lombok/tasks/PostCompile.java index 94187b87..8dd9f237 100644 --- a/lombok-plugin/src/main/java/io/freefair/gradle/plugins/lombok/tasks/PostCompile.java +++ b/lombok-plugin/src/main/java/io/freefair/gradle/plugins/lombok/tasks/PostCompile.java @@ -1,10 +1,14 @@ package io.freefair.gradle.plugins.lombok.tasks; +import lombok.AccessLevel; import lombok.Getter; import org.gradle.api.DefaultTask; import org.gradle.api.file.ConfigurableFileCollection; import org.gradle.api.provider.Property; import org.gradle.api.tasks.*; +import org.gradle.process.ExecOperations; + +import javax.inject.Inject; /** * Runs registered post compiler handlers to against existing class files, modifying them in the process. @@ -15,6 +19,9 @@ @CacheableTask public class PostCompile extends DefaultTask implements LombokTask { + @Getter(AccessLevel.NONE) + private final ExecOperations execOperations; + @Classpath private final ConfigurableFileCollection lombokClasspath = getProject().files(); @@ -26,9 +33,14 @@ public class PostCompile extends DefaultTask implements LombokTask { @Console private final Property verbose = getProject().getObjects().property(Boolean.class).convention(false); + @Inject + public PostCompile(ExecOperations execOperations) { + this.execOperations = execOperations; + } + @TaskAction public void postCompile() { - getProject().javaexec(postCompile -> { + execOperations.javaexec(postCompile -> { postCompile.setClasspath(getLombokClasspath()); postCompile.getMainClass().set("lombok.launch.Main"); postCompile.args("post-compile"); diff --git a/maven-plugin/src/main/java/io/freefair/gradle/plugins/maven/war/WarOverlayPlugin.java b/maven-plugin/src/main/java/io/freefair/gradle/plugins/maven/war/WarOverlayPlugin.java index fced94f2..8915f46f 100644 --- a/maven-plugin/src/main/java/io/freefair/gradle/plugins/maven/war/WarOverlayPlugin.java +++ b/maven-plugin/src/main/java/io/freefair/gradle/plugins/maven/war/WarOverlayPlugin.java @@ -1,6 +1,7 @@ package io.freefair.gradle.plugins.maven.war; import groovy.lang.Closure; +import lombok.RequiredArgsConstructor; import org.codehaus.groovy.runtime.StringGroovyMethods; import org.gradle.api.*; import org.gradle.api.artifacts.Configuration; @@ -69,13 +70,7 @@ private void configureOverlay(WarOverlay overlay) { if (overlay.isDeferProvidedConfiguration()) { //Delay this to trick IntelliJ - //noinspection Convert2Lambda - overlay.getWarTask().doFirst(new Action() { - @Override - public void execute(Task w) { - overlay.getWarCopySpec().exclude(element -> overlay.isProvided()); - } - }); + overlay.getWarTask().doFirst(new ExcludeProvidedAction(overlay)); } else { overlay.getWarCopySpec().exclude(element -> overlay.isProvided()); } @@ -199,4 +194,13 @@ private String getClasspathConfigurationName(War warTask) { return warTask.getName() + "OverlayClasspath"; } + @RequiredArgsConstructor + private static class ExcludeProvidedAction implements Action { + private final WarOverlay overlay; + + @Override + public void execute(Task w) { + overlay.getWarCopySpec().exclude(element -> overlay.isProvided()); + } + } } diff --git a/mkdocs-plugin/src/main/java/io/freefair/gradle/plugins/mkdocs/tasks/MkDocs.java b/mkdocs-plugin/src/main/java/io/freefair/gradle/plugins/mkdocs/tasks/MkDocs.java index 520b7f68..d533fce5 100644 --- a/mkdocs-plugin/src/main/java/io/freefair/gradle/plugins/mkdocs/tasks/MkDocs.java +++ b/mkdocs-plugin/src/main/java/io/freefair/gradle/plugins/mkdocs/tasks/MkDocs.java @@ -7,11 +7,15 @@ import org.gradle.api.tasks.Console; import org.gradle.api.tasks.Input; import org.gradle.api.tasks.TaskAction; +import org.gradle.process.ExecOperations; import org.gradle.process.ExecSpec; @Getter public abstract class MkDocs extends DefaultTask { + @Getter(AccessLevel.NONE) + private final ExecOperations execOperations; + @Getter(AccessLevel.PROTECTED) @Input private final String command; @@ -28,13 +32,14 @@ public abstract class MkDocs extends DefaultTask { @Console private final Property verbose = getProject().getObjects().property(Boolean.class); - protected MkDocs(String command) { + protected MkDocs(ExecOperations execOperations, String command) { + this.execOperations = execOperations; this.command = command; } @TaskAction public void exec() { - getProject().exec(mkdocs -> { + execOperations.exec(mkdocs -> { mkdocs.setExecutable("mkdocs"); mkdocs.args(command); diff --git a/mkdocs-plugin/src/main/java/io/freefair/gradle/plugins/mkdocs/tasks/MkDocsBuild.java b/mkdocs-plugin/src/main/java/io/freefair/gradle/plugins/mkdocs/tasks/MkDocsBuild.java index 5aa26394..e1ab4602 100644 --- a/mkdocs-plugin/src/main/java/io/freefair/gradle/plugins/mkdocs/tasks/MkDocsBuild.java +++ b/mkdocs-plugin/src/main/java/io/freefair/gradle/plugins/mkdocs/tasks/MkDocsBuild.java @@ -5,8 +5,11 @@ import org.gradle.api.file.RegularFileProperty; import org.gradle.api.provider.Property; import org.gradle.api.tasks.*; +import org.gradle.process.ExecOperations; import org.gradle.process.ExecSpec; +import javax.inject.Inject; + /** * Build the MkDocs documentation. */ @@ -51,8 +54,9 @@ public class MkDocsBuild extends MkDocs { @OutputDirectory private final DirectoryProperty siteDir = getProject().getObjects().directoryProperty(); - public MkDocsBuild() { - super("build"); + @Inject + public MkDocsBuild(ExecOperations execOperations) { + super(execOperations, "build"); setDescription("Build the MkDocs documentation"); } diff --git a/mkdocs-plugin/src/main/java/io/freefair/gradle/plugins/mkdocs/tasks/MkDocsGhDeploy.java b/mkdocs-plugin/src/main/java/io/freefair/gradle/plugins/mkdocs/tasks/MkDocsGhDeploy.java index c2b701a1..59024cff 100644 --- a/mkdocs-plugin/src/main/java/io/freefair/gradle/plugins/mkdocs/tasks/MkDocsGhDeploy.java +++ b/mkdocs-plugin/src/main/java/io/freefair/gradle/plugins/mkdocs/tasks/MkDocsGhDeploy.java @@ -4,8 +4,11 @@ import org.gradle.api.file.RegularFileProperty; import org.gradle.api.provider.Property; import org.gradle.api.tasks.*; +import org.gradle.process.ExecOperations; import org.gradle.process.ExecSpec; +import javax.inject.Inject; + /** * Deploy your documentation to GitHub Pages. */ @@ -59,8 +62,9 @@ public class MkDocsGhDeploy extends MkDocs { @Input private final Property ignoreVersion = getProject().getObjects().property(Boolean.class); - public MkDocsGhDeploy() { - super("gh-deploy"); + @Inject + public MkDocsGhDeploy(ExecOperations execOperations) { + super(execOperations, "gh-deploy"); setDescription("Deploy your documentation to GitHub Pages"); } diff --git a/mkdocs-plugin/src/main/java/io/freefair/gradle/plugins/mkdocs/tasks/MkDocsNew.java b/mkdocs-plugin/src/main/java/io/freefair/gradle/plugins/mkdocs/tasks/MkDocsNew.java index 16948e0c..c8a96e72 100644 --- a/mkdocs-plugin/src/main/java/io/freefair/gradle/plugins/mkdocs/tasks/MkDocsNew.java +++ b/mkdocs-plugin/src/main/java/io/freefair/gradle/plugins/mkdocs/tasks/MkDocsNew.java @@ -4,10 +4,10 @@ import org.gradle.api.file.DirectoryProperty; import org.gradle.api.tasks.Optional; import org.gradle.api.tasks.OutputDirectory; -import org.gradle.process.CommandLineArgumentProvider; +import org.gradle.process.ExecOperations; import org.gradle.process.ExecSpec; -import java.util.LinkedList; +import javax.inject.Inject; /** * Create a new MkDocs project @@ -19,8 +19,9 @@ public class MkDocsNew extends MkDocs { @OutputDirectory private final DirectoryProperty projectDirectory = getProject().getObjects().directoryProperty(); - public MkDocsNew() { - super("new"); + @Inject + public MkDocsNew(ExecOperations execOperations) { + super(execOperations, "new"); setDescription("Create a new MkDocs project"); } diff --git a/mkdocs-plugin/src/main/java/io/freefair/gradle/plugins/mkdocs/tasks/MkDocsServe.java b/mkdocs-plugin/src/main/java/io/freefair/gradle/plugins/mkdocs/tasks/MkDocsServe.java index a49c8e78..6abb2332 100644 --- a/mkdocs-plugin/src/main/java/io/freefair/gradle/plugins/mkdocs/tasks/MkDocsServe.java +++ b/mkdocs-plugin/src/main/java/io/freefair/gradle/plugins/mkdocs/tasks/MkDocsServe.java @@ -5,10 +5,10 @@ import org.gradle.api.file.RegularFileProperty; import org.gradle.api.provider.Property; import org.gradle.api.tasks.*; -import org.gradle.process.CommandLineArgumentProvider; +import org.gradle.process.ExecOperations; import org.gradle.process.ExecSpec; -import java.util.LinkedList; +import javax.inject.Inject; /** * Run the builtin development server. @@ -69,8 +69,9 @@ public class MkDocsServe extends MkDocs { @Input private final Property dirtyreload = getProject().getObjects().property(Boolean.class); - public MkDocsServe() { - super("serve"); + @Inject + public MkDocsServe(ExecOperations execOperations) { + super(execOperations, "serve"); setDescription("Run the builtin development server."); }