Search in sources :

Example 1 with ProjectLayout

use of org.gradle.api.file.ProjectLayout in project gradle by gradle.

the class GradleJavadocsPlugin method apply.

@Override
public void apply(Project project) {
    ProjectLayout layout = project.getLayout();
    TaskContainer tasks = project.getTasks();
    GradleDocumentationExtension extension = project.getExtensions().getByType(GradleDocumentationExtension.class);
    generateJavadocs(project, layout, tasks, extension);
}
Also used : TaskContainer(org.gradle.api.tasks.TaskContainer) ProjectLayout(org.gradle.api.file.ProjectLayout)

Example 2 with ProjectLayout

use of org.gradle.api.file.ProjectLayout in project gradle by gradle.

the class GradleUserManualPlugin method generateUserManual.

private void generateUserManual(Project project, TaskContainer tasks, ProjectLayout layout, GradleDocumentationExtension extension) {
    tasks.withType(AsciidoctorTask.class).configureEach(task -> {
        if (task.getName().equals("asciidoctor")) {
            // ignore this task
            task.setEnabled(false);
            return;
        }
        task.outputOptions(options -> {
            options.setSeparateOutputDirs(false);
            options.setBackends(singletonList("html5"));
        });
        // TODO: Break the paths assumed here
        TaskInputs inputs = task.getInputs();
        inputs.files(extension.getCssFiles()).withPropertyName("manual").withPathSensitivity(PathSensitivity.RELATIVE);
        inputs.dir("src/main/resources").withPropertyName("resources").withPathSensitivity(PathSensitivity.RELATIVE);
        inputs.dir(extension.getUserManual().getSnippets()).withPropertyName("snippets").withPathSensitivity(PathSensitivity.RELATIVE);
        inputs.dir(extension.getUserManual().getSamples()).withPropertyName("samples").withPathSensitivity(PathSensitivity.RELATIVE);
        Provider<Directory> stylesDir = extension.getUserManual().getStagedDocumentation().dir("css");
        inputs.dir(stylesDir).withPropertyName("stylesdir").withPathSensitivity(PathSensitivity.RELATIVE);
        // TODO: Break the paths assumed here
        Map<String, Object> attributes = new HashMap<>();
        // TODO: This breaks the provider
        attributes.put("stylesdir", stylesDir.get().getAsFile().getAbsolutePath());
        attributes.put("stylesheet", "manual.css");
        attributes.put("doctype", "book");
        attributes.put("imagesdir", "img");
        attributes.put("nofooter", true);
        attributes.put("sectanchors", true);
        attributes.put("sectlinks", true);
        attributes.put("linkattrs", true);
        attributes.put("reproducible", "");
        attributes.put("docinfo", "");
        attributes.put("lang", "en-US");
        attributes.put("encoding", "utf-8");
        attributes.put("idprefix", "");
        attributes.put("website", "https://gradle.org");
        // TODO: This breaks the provider
        attributes.put("javaApi", extension.getJavadocs().getJavaApi().get().toString());
        attributes.put("jdkDownloadUrl", "https://jdk.java.net/");
        // TODO: This is coupled to extension.getJavadocs().getJavaApi()
        attributes.put("javadocReferenceUrl", "https://docs.oracle.com/javase/8/docs/technotes/tools/windows/javadoc.html");
        // TODO: This is coupled to extension.getJavadocs().getJavaApi()
        attributes.put("minJdkVersion", "8");
        attributes.put("antManual", "https://ant.apache.org/manual");
        attributes.put("docsUrl", "https://docs.gradle.org");
        // TODO: This breaks if the version is changed later.
        attributes.put("gradleVersion", project.getVersion().toString());
        attributes.put("snippetsPath", "snippets");
        // Make sure the 'raw' location of the samples is available in all AsciidoctorTasks to access files with expected outputs in the 'tests' folder for inclusion in READMEs
        attributes.put("samplesPath", extension.getUserManual().getStagingRoot().dir("raw/samples").get().getAsFile());
        task.attributes(attributes);
    });
    TaskProvider<GenerateDocInfo> generateDocinfo = tasks.register("generateDocInfo", GenerateDocInfo.class, task -> {
        task.getDocumentationFiles().from(extension.getUserManual().getRoot());
        task.getDocumentationRoot().convention(extension.getUserManual().getRoot());
        task.getDestinationDirectory().convention(layout.getBuildDirectory().dir("tmp/" + task.getName()));
    });
    TaskProvider<Sync> userguideFlattenSources = tasks.register("stageUserguideSource", Sync.class, task -> {
        task.setDuplicatesStrategy(DuplicatesStrategy.FAIL);
        // TODO: This doesn't allow adoc files to be generated?
        task.from(extension.getUserManual().getRoot(), sub -> {
            sub.include("**/*.adoc");
            // Flatten adocs into a single directory
            sub.eachFile(fcd -> fcd.setRelativePath(RelativePath.parse(true, fcd.getName())));
        });
        // From the snippets and the samples, filter out files generated if the build contained was ever executed
        task.from(extension.getUserManual().getSnippets(), sub -> {
            sub.into("snippets");
            sub.exclude("**/.gradle/**");
            sub.exclude("**/build/**");
            sub.setIncludeEmptyDirs(false);
        });
        task.from(extension.getUserManual().getSamples(), sub -> {
            sub.into("samples");
            sub.exclude("**/*.adoc");
            sub.exclude("**/.gradle/**");
            sub.exclude("**/build/**");
            sub.setIncludeEmptyDirs(false);
        });
        task.from(extension.getCssFiles(), sub -> sub.into("css"));
        task.from(extension.getUserManual().getRoot().dir("img"), sub -> {
            sub.include("**/*.png", "**/*.gif", "**/*.jpg", "**/*.svg");
            sub.into("img");
        });
        task.from(extension.getUserManual().getResources());
        task.from(generateDocinfo);
        // TODO: This should be available on a Copy task.
        DirectoryProperty flattenedAsciidocDirectory = project.getObjects().directoryProperty();
        flattenedAsciidocDirectory.set(extension.getUserManual().getStagingRoot().dir("raw"));
        task.getOutputs().dir(flattenedAsciidocDirectory);
        task.getExtensions().getExtraProperties().set("destinationDirectory", flattenedAsciidocDirectory);
        task.into(flattenedAsciidocDirectory);
    });
    TaskProvider<AsciidoctorTask> userguideSinglePageHtml = tasks.register("userguideSinglePageHtml", AsciidoctorTask.class, task -> {
        task.setDescription("Generates HTML single-page user manual.");
        configureForUserGuideSinglePage(task, extension, project);
        task.outputOptions(options -> options.setBackends(singletonList("html5")));
        // TODO: This breaks the provider
        task.setOutputDir(extension.getUserManual().getStagingRoot().dir("render-single-html").get().getAsFile());
    });
    TaskProvider<AsciidoctorTask> userguideSinglePagePdf = tasks.register("userguideSinglePagePdf", AsciidoctorTask.class, task -> {
        task.setDescription("Generates PDF single-page user manual.");
        configureForUserGuideSinglePage(task, extension, project);
        task.outputOptions(options -> options.setBackends(singletonList("pdf")));
        // TODO: This breaks the provider
        task.setOutputDir(extension.getUserManual().getStagingRoot().dir("render-single-pdf").get().getAsFile());
    });
    TaskProvider<AsciidoctorTask> userguideMultiPage = tasks.register("userguideMultiPage", AsciidoctorTask.class, task -> {
        task.setGroup("documentation");
        task.setDescription("Generates multi-page user manual.");
        task.dependsOn(extension.getUserManual().getStagedDocumentation());
        task.sources(patternSet -> {
            patternSet.include("**/*.adoc");
            patternSet.exclude("javaProject*Layout.adoc");
            patternSet.exclude("userguide_single.adoc");
            patternSet.exclude("snippets/**/*.adoc");
        });
        // TODO: This breaks the provider
        task.setSourceDir(extension.getUserManual().getStagedDocumentation().get().getAsFile());
        // TODO: This breaks the provider
        task.setOutputDir(extension.getUserManual().getStagingRoot().dir("render-multi").get().getAsFile());
        Map<String, Object> attributes = new HashMap<>();
        attributes.put("icons", "font");
        attributes.put("source-highlighter", "prettify");
        attributes.put("toc", "auto");
        attributes.put("toclevels", 1);
        attributes.put("toc-title", "Contents");
        attributes.put("groovyDslPath", "../dsl");
        attributes.put("javadocPath", "../javadoc");
        attributes.put("kotlinDslPath", "https://gradle.github.io/kotlin-dsl-docs/api");
        // Used by SampleIncludeProcessor from `gradle/dotorg-docs`
        // TODO: This breaks the provider
        // TODO:
        attributes.put("samples-dir", extension.getUserManual().getStagedDocumentation().get().getAsFile());
        task.attributes(attributes);
    });
    // Avoid overlapping outputs by copying exactly what we want from other intermediate tasks
    TaskProvider<Sync> userguide = tasks.register("userguide", Sync.class, task -> {
        task.setGroup("documentation");
        task.setDescription("Stages rendered user manual documentation.");
        task.from(userguideSinglePageHtml);
        task.from(userguideSinglePagePdf);
        task.from(userguideMultiPage);
        task.into(extension.getUserManual().getStagingRoot().dir("final"));
        // TODO: Eliminate this duplication with the flatten task
        task.from(extension.getUserManual().getRoot().dir("img"), sub -> {
            sub.include("**/*.png", "**/*.gif", "**/*.jpg", "**/*.svg");
            sub.into("img");
        });
        task.rename("userguide_single.pdf", "userguide.pdf");
    });
    extension.userManual(userManual -> {
        userManual.getRoot().convention(extension.getSourceRoot().dir("userguide"));
        userManual.getStagingRoot().convention(extension.getStagingRoot().dir("usermanual"));
        // TODO: These should be generated too
        userManual.getSnippets().convention(layout.getProjectDirectory().dir("src/snippets"));
        userManual.getSamples().convention(layout.getProjectDirectory().dir("src/samples"));
        userManual.getStagedDocumentation().convention(userguideFlattenSources.flatMap(task -> (DirectoryProperty) task.getExtensions().getExtraProperties().get("destinationDirectory")));
        userManual.getRenderedDocumentation().from(userguide);
    });
}
Also used : HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) Collections.singletonList(java.util.Collections.singletonList) LifecycleBasePlugin(org.gradle.language.base.plugins.LifecycleBasePlugin) Provider(org.gradle.api.provider.Provider) RelativePath(org.gradle.api.file.RelativePath) Sync(org.gradle.api.tasks.Sync) AsciidoctorTask(org.asciidoctor.gradle.jvm.AsciidoctorTask) TaskProvider(org.gradle.api.tasks.TaskProvider) DirectoryProperty(org.gradle.api.file.DirectoryProperty) SourceSetContainer(org.gradle.api.tasks.SourceSetContainer) Arrays.asList(java.util.Arrays.asList) PathSensitivity(org.gradle.api.tasks.PathSensitivity) Map(java.util.Map) DuplicatesStrategy(org.gradle.api.file.DuplicatesStrategy) Collections.singletonMap(java.util.Collections.singletonMap) Directory(org.gradle.api.file.Directory) TaskInputs(org.gradle.api.tasks.TaskInputs) Project(org.gradle.api.Project) List(java.util.List) ProjectLayout(org.gradle.api.file.ProjectLayout) TaskContainer(org.gradle.api.tasks.TaskContainer) GenerateApiMapping(gradlebuild.docs.dsl.source.GenerateApiMapping) GenerateDefaultImports(gradlebuild.docs.dsl.source.GenerateDefaultImports) Plugin(org.gradle.api.Plugin) HashMap(java.util.HashMap) TaskInputs(org.gradle.api.tasks.TaskInputs) DirectoryProperty(org.gradle.api.file.DirectoryProperty) Sync(org.gradle.api.tasks.Sync) AsciidoctorTask(org.asciidoctor.gradle.jvm.AsciidoctorTask) Directory(org.gradle.api.file.Directory)

Example 3 with ProjectLayout

use of org.gradle.api.file.ProjectLayout in project gradle by gradle.

the class GradleReleaseNotesPlugin method generateReleaseNotes.

private void generateReleaseNotes(Project project, ProjectLayout layout, TaskContainer tasks, GradleDocumentationExtension extension) {
    TaskProvider<RenderMarkdown> releaseNotesMarkdown = tasks.register("releaseNotesMarkdown", RenderMarkdown.class, task -> {
        task.setGroup("release notes");
        task.setDescription("Generate release notes HTML page from Markdown.");
        task.getInputEncoding().convention(Charset.defaultCharset().name());
        task.getOutputEncoding().convention(Charset.defaultCharset().name());
        task.getMarkdownFile().convention(extension.getReleaseNotes().getMarkdownFile());
        task.getDestinationFile().convention(extension.getStagingRoot().file("release-notes/raw.html"));
    });
    TaskProvider<DecorateReleaseNotes> releaseNotesPostProcess = tasks.register("releaseNotes", DecorateReleaseNotes.class, task -> {
        task.setGroup("release notes");
        task.setDescription("Transforms generated release notes.");
        task.getHtmlFile().convention(releaseNotesMarkdown.flatMap(RenderMarkdown::getDestinationFile));
        task.getBaseCssFile().convention(extension.getReleaseNotes().getBaseCssFile());
        task.getReleaseNotesCssFile().convention(extension.getReleaseNotes().getReleaseNotesCssFile());
        task.getReleaseNotesJavascriptFile().convention(extension.getReleaseNotes().getReleaseNotesJsFile());
        task.getJquery().from(extension.getReleaseNotes().getJquery());
        ModuleIdentityExtension moduleIdentity = project.getExtensions().getByType(ModuleIdentityExtension.class);
        MapProperty<String, String> replacementTokens = task.getReplacementTokens();
        replacementTokens.put("version", moduleIdentity.getVersion().map(GradleVersion::getVersion));
        replacementTokens.put("baseVersion", moduleIdentity.getVersion().map(v -> v.getBaseVersion().getVersion()));
        task.getDestinationFile().convention(extension.getStagingRoot().file("release-notes/release-notes.html"));
    });
    Configuration jquery = project.getConfigurations().create("jquery", conf -> {
        conf.setDescription("JQuery dependencies embedded by release notes.");
    });
    extension.releaseNotes(releaseNotes -> {
        releaseNotes.getMarkdownFile().convention(extension.getSourceRoot().file("release/notes.md"));
        releaseNotes.getRenderedDocumentation().convention(releaseNotesPostProcess.flatMap(DecorateReleaseNotes::getDestinationFile));
        releaseNotes.getBaseCssFile().convention(extension.getSourceRoot().file("css/base.css"));
        releaseNotes.getReleaseNotesCssFile().convention(extension.getSourceRoot().file("css/release-notes.css"));
        releaseNotes.getReleaseNotesJsFile().convention(extension.getSourceRoot().file("release/content/script.js"));
        releaseNotes.getJquery().from(jquery);
    });
}
Also used : Configuration(org.gradle.api.artifacts.Configuration) ProjectLayout(org.gradle.api.file.ProjectLayout) TaskContainer(org.gradle.api.tasks.TaskContainer) Charset(java.nio.charset.Charset) Project(org.gradle.api.Project) MapProperty(org.gradle.api.provider.MapProperty) TaskProvider(org.gradle.api.tasks.TaskProvider) ModuleIdentityExtension(gradlebuild.identity.extension.ModuleIdentityExtension) Plugin(org.gradle.api.Plugin) GradleVersion(org.gradle.util.GradleVersion) Configuration(org.gradle.api.artifacts.Configuration) ModuleIdentityExtension(gradlebuild.identity.extension.ModuleIdentityExtension)

Example 4 with ProjectLayout

use of org.gradle.api.file.ProjectLayout in project gradle by gradle.

the class GradleReleaseNotesPlugin method apply.

@Override
public void apply(Project project) {
    ProjectLayout layout = project.getLayout();
    TaskContainer tasks = project.getTasks();
    GradleDocumentationExtension extension = project.getExtensions().getByType(GradleDocumentationExtension.class);
    generateReleaseNotes(project, layout, tasks, extension);
}
Also used : TaskContainer(org.gradle.api.tasks.TaskContainer) ProjectLayout(org.gradle.api.file.ProjectLayout)

Example 5 with ProjectLayout

use of org.gradle.api.file.ProjectLayout in project gradle by gradle.

the class PmdPlugin method configureReportsConventionMapping.

private void configureReportsConventionMapping(Pmd task, final String baseName) {
    ProjectLayout layout = project.getLayout();
    ProviderFactory providers = project.getProviders();
    Provider<RegularFile> reportsDir = layout.file(providers.provider(() -> extension.getReportsDir()));
    task.getReports().all(action(report -> {
        report.getRequired().convention(true);
        report.getOutputLocation().convention(layout.getProjectDirectory().file(providers.provider(() -> {
            String reportFileName = baseName + "." + report.getName();
            return new File(reportsDir.get().getAsFile(), reportFileName).getAbsolutePath();
        })));
    }));
}
Also used : SerializableLambdas.action(org.gradle.api.internal.lambdas.SerializableLambdas.action) JavaVersion(org.gradle.api.JavaVersion) FileCollection(org.gradle.api.file.FileCollection) ConventionMapping(org.gradle.api.internal.ConventionMapping) File(java.io.File) SourceSet(org.gradle.api.tasks.SourceSet) ArrayList(java.util.ArrayList) Inject(javax.inject.Inject) Configuration(org.gradle.api.artifacts.Configuration) ProviderFactory(org.gradle.api.provider.ProviderFactory) Provider(org.gradle.api.provider.Provider) ProjectLayout(org.gradle.api.file.ProjectLayout) ConfigurationContainer(org.gradle.api.artifacts.ConfigurationContainer) RegularFile(org.gradle.api.file.RegularFile) VersionNumber(org.gradle.util.internal.VersionNumber) AbstractCodeQualityPlugin(org.gradle.api.plugins.quality.internal.AbstractCodeQualityPlugin) Collections(java.util.Collections) JvmPluginServices(org.gradle.api.plugins.jvm.internal.JvmPluginServices) RegularFile(org.gradle.api.file.RegularFile) ProjectLayout(org.gradle.api.file.ProjectLayout) ProviderFactory(org.gradle.api.provider.ProviderFactory) File(java.io.File) RegularFile(org.gradle.api.file.RegularFile)

Aggregations

ProjectLayout (org.gradle.api.file.ProjectLayout)13 TaskContainer (org.gradle.api.tasks.TaskContainer)10 Plugin (org.gradle.api.Plugin)5 Configuration (org.gradle.api.artifacts.Configuration)5 ProviderFactory (org.gradle.api.provider.ProviderFactory)5 File (java.io.File)4 Project (org.gradle.api.Project)4 ObjectFactory (org.gradle.api.model.ObjectFactory)4 Provider (org.gradle.api.provider.Provider)4 TaskProvider (org.gradle.api.tasks.TaskProvider)4 Directory (org.gradle.api.file.Directory)3 RegularFile (org.gradle.api.file.RegularFile)3 ConventionMapping (org.gradle.api.internal.ConventionMapping)3 SerializableLambdas.action (org.gradle.api.internal.lambdas.SerializableLambdas.action)3 AbstractCodeQualityPlugin (org.gradle.api.plugins.quality.internal.AbstractCodeQualityPlugin)3 SourceSet (org.gradle.api.tasks.SourceSet)3 ArrayList (java.util.ArrayList)2 Collections (java.util.Collections)2 Map (java.util.Map)2 Inject (javax.inject.Inject)2