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

dev.lajoscseppento.ruthless.plugin.impl.AbstractProjectPlugin Maven / Gradle / Ivy

There is a newer version: 0.8.0
Show newest version
package dev.lajoscseppento.ruthless.plugin.impl;

import dev.lajoscseppento.ruthless.plugin.configuration.impl.GroupIdArtifactId;
import dev.lajoscseppento.ruthless.plugin.logging.RuthlessLogger;
import java.util.Collections;
import java.util.List;
import lombok.NonNull;
import org.gradle.api.Plugin;
import org.gradle.api.Project;
import org.gradle.api.artifacts.ConfigurationContainer;
import org.gradle.api.artifacts.dsl.DependencyHandler;
import org.gradle.api.artifacts.dsl.RepositoryHandler;
import org.gradle.api.invocation.Gradle;
import org.gradle.api.plugins.ExtensionContainer;
import org.gradle.api.plugins.JavaPluginExtension;
import org.gradle.api.tasks.SourceSetContainer;
import org.gradle.api.tasks.TaskContainer;

/**
 * Base class to approximate buildscript DSL and facilitate writing cleaner plugin code.
 *
 * 

Note that some fields might be null during runtime if the plugin which declares it is not * applied. * *

Note that fields are populated before {@link #apply()} is called, and they are not updated * later. */ public abstract class AbstractProjectPlugin implements Plugin { protected Project project; protected RuthlessLogger logger; protected ConfigurationContainer configurations; protected DependencyHandler dependencies; protected ExtensionContainer extensions; protected Gradle gradle; protected RepositoryHandler repositories; protected TaskContainer tasks; protected JavaPluginExtension java; protected SourceSetContainer sourceSets; @Override public final void apply(@NonNull Project project) { this.project = project; logger = RuthlessLogger.create(project.getLogger(), "ruthless"); for (Class requiredPlugin : requiredPlugins()) { project.getPluginManager().apply(requiredPlugin); } logger.info("Applying {} to {}", getClass().getSimpleName(), project); configurations = project.getConfigurations(); dependencies = project.getDependencies(); extensions = project.getExtensions(); gradle = project.getGradle(); repositories = project.getRepositories(); tasks = project.getTasks(); java = (JavaPluginExtension) extensions.findByName("java"); sourceSets = (SourceSetContainer) extensions.findByName("sourceSets"); apply(); } /** * Returns the list of plugins which should be applied before executing this plugin's logic. * * @return the list of plugins which should be applied before executing this plugin's logic */ protected List>> requiredPlugins() { return Collections.emptyList(); } /** Plugin logic. */ protected void apply() { // default no-op } protected final void declareDependencies( String configurationName, List dependenciesToDeclare) { for (GroupIdArtifactId dependency : dependenciesToDeclare) { String dep = dependency.toDependencyNotation(); logger.info("Declaring dependency {} on {} of {}", dep, configurationName, project); dependencies.add(configurationName, dep); } } protected final void declarePlatformDependencies( String configurationName, List platformDependenciesToDeclare) { for (GroupIdArtifactId dependency : platformDependenciesToDeclare) { String dep = dependency.toDependencyNotation(); logger.info("Declaring platform dependency {} on {} of {}", dep, configurationName, project); dependencies.add(configurationName, dependencies.platform(dep)); } } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy