All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.freefair.gradle.plugins.maven.plugin.MavenPluginPlugin Maven / Gradle / Ivy

package io.freefair.gradle.plugins.maven.plugin;

import io.freefair.gradle.plugins.maven.MavenPublishJavaPlugin;
import org.gradle.api.Plugin;
import org.gradle.api.Project;
import org.gradle.api.plugins.JavaPlugin;
import org.gradle.api.plugins.JavaPluginExtension;
import org.gradle.api.publish.maven.tasks.GenerateMavenPom;
import org.gradle.api.tasks.SourceSet;
import org.gradle.api.tasks.TaskProvider;
import org.gradle.api.tasks.compile.JavaCompile;

/**
 * A Gradle plugin for building Maven plugins.
 *
 * @author Lars Grefer
 */
public class MavenPluginPlugin implements Plugin {

    @Override
    public void apply(Project project) {
        project.getPlugins().apply(JavaPlugin.class);
        MavenPublishJavaPlugin mavenPublishJavaPlugin = project.getPlugins().apply(MavenPublishJavaPlugin.class);

        // https://github.com/gradle/gradle/issues/10555#issue-492150084
        if (project.getGradle().getGradleVersion().matches("5\\.6(\\.[12])?")) {
            mavenPublishJavaPlugin.getPublication().getPom().withXml(xmlProvider ->
                    xmlProvider.asNode().appendNode("packaging", "maven-plugin")
            );
        }
        else {
            mavenPublishJavaPlugin.getPublication().getPom().setPackaging("maven-plugin");
        }

        TaskProvider generateMavenPom = project.getTasks().named("generatePomFileForMavenJavaPublication", GenerateMavenPom.class);

        SourceSet main = project.getExtensions().getByType(JavaPluginExtension.class).getSourceSets().getByName("main");

        TaskProvider descriptorGeneratorTaskProvider = project.getTasks().register("generateMavenPluginDescriptor", DescriptorGeneratorTask.class, generateMavenPluginDescriptor -> {

            generateMavenPluginDescriptor.dependsOn(generateMavenPom);
            generateMavenPluginDescriptor.getPomFile().fileProvider(generateMavenPom.map(GenerateMavenPom::getDestination));

            generateMavenPluginDescriptor.getOutputDirectory().set(
                    project.getLayout().getBuildDirectory().dir("generated/resources/maven-plugin-descriptor")
            );

            generateMavenPluginDescriptor.getSourceDirectories().from(main.getAllJava().getSourceDirectories());
            JavaCompile javaCompile = (JavaCompile) project.getTasks().getByName(main.getCompileJavaTaskName());

            generateMavenPluginDescriptor.getClassesDirectories().from(javaCompile);
            generateMavenPluginDescriptor.getEncoding().convention(javaCompile.getOptions().getEncoding());
        });

        main.getResources().srcDir(descriptorGeneratorTaskProvider);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy