
dev.lajoscseppento.ruthless.plugin.impl.AbstractProjectPlugin Maven / Gradle / Ivy
Show all versions of ruthless-plugin Show documentation
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));
}
}
}