|
|
|
@ -1,5 +1,5 @@
|
|
|
|
|
/*
|
|
|
|
|
* Copyright 2012-2020 the original author or authors.
|
|
|
|
|
* Copyright 2012-2021 the original author or authors.
|
|
|
|
|
*
|
|
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
|
* you may not use this file except in compliance with the License.
|
|
|
|
@ -19,19 +19,15 @@ package org.springframework.boot.build.optional;
|
|
|
|
|
import org.gradle.api.Plugin;
|
|
|
|
|
import org.gradle.api.Project;
|
|
|
|
|
import org.gradle.api.artifacts.Configuration;
|
|
|
|
|
import org.gradle.api.attributes.Usage;
|
|
|
|
|
import org.gradle.api.plugins.JavaPlugin;
|
|
|
|
|
import org.gradle.api.plugins.JavaPluginConvention;
|
|
|
|
|
import org.gradle.api.tasks.SourceSetContainer;
|
|
|
|
|
import org.gradle.api.tasks.javadoc.Javadoc;
|
|
|
|
|
import org.gradle.plugins.ide.eclipse.EclipsePlugin;
|
|
|
|
|
import org.gradle.plugins.ide.eclipse.model.EclipseModel;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* A {@code Plugin} that adds support for Maven-style optional dependencies. Creates a new
|
|
|
|
|
* {@code optional} configuration. The {@code optional} configuration is part of the
|
|
|
|
|
* project's compile and runtime classpath's but does not affect the classpath of
|
|
|
|
|
* dependent projects.
|
|
|
|
|
* project's compile and runtime classpaths but does not affect the classpath of dependent
|
|
|
|
|
* projects.
|
|
|
|
|
*
|
|
|
|
|
* @author Andy Wilkinson
|
|
|
|
|
*/
|
|
|
|
@ -44,22 +40,19 @@ public class OptionalDependenciesPlugin implements Plugin<Project> {
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void apply(Project project) {
|
|
|
|
|
Configuration optional = project.getConfigurations().create(OPTIONAL_CONFIGURATION_NAME);
|
|
|
|
|
optional.attributes((attributes) -> attributes.attribute(Usage.USAGE_ATTRIBUTE,
|
|
|
|
|
project.getObjects().named(Usage.class, Usage.JAVA_RUNTIME)));
|
|
|
|
|
Configuration optional = project.getConfigurations().create("optional");
|
|
|
|
|
optional.setCanBeConsumed(false);
|
|
|
|
|
optional.setCanBeResolved(false);
|
|
|
|
|
project.getPlugins().withType(JavaPlugin.class, (javaPlugin) -> {
|
|
|
|
|
SourceSetContainer sourceSets = project.getConvention().getPlugin(JavaPluginConvention.class)
|
|
|
|
|
.getSourceSets();
|
|
|
|
|
sourceSets.all((sourceSet) -> {
|
|
|
|
|
sourceSet.setCompileClasspath(sourceSet.getCompileClasspath().plus(optional));
|
|
|
|
|
sourceSet.setRuntimeClasspath(sourceSet.getRuntimeClasspath().plus(optional));
|
|
|
|
|
project.getConfigurations().getByName(sourceSet.getCompileClasspathConfigurationName())
|
|
|
|
|
.extendsFrom(optional);
|
|
|
|
|
project.getConfigurations().getByName(sourceSet.getRuntimeClasspathConfigurationName())
|
|
|
|
|
.extendsFrom(optional);
|
|
|
|
|
});
|
|
|
|
|
project.getTasks().withType(Javadoc.class)
|
|
|
|
|
.all((javadoc) -> javadoc.setClasspath(javadoc.getClasspath().plus(optional)));
|
|
|
|
|
});
|
|
|
|
|
project.getPlugins().withType(EclipsePlugin.class,
|
|
|
|
|
(eclipsePlugin) -> project.getExtensions().getByType(EclipseModel.class)
|
|
|
|
|
.classpath((classpath) -> classpath.getPlusConfigurations().add(optional)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|