Skip to content

Commit bec8518

Browse files
committed
Make assertj dependency optional
- Fixes #561
1 parent ea76e0d commit bec8518

File tree

6 files changed

+80
-2
lines changed

6 files changed

+80
-2
lines changed

buildSrc/src/main/java/org/springframework/shell/gradle/ManagementConfigurationPlugin.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ public void apply(Project project) {
5252
configurations.getByName("testFixturesCompileClasspath").extendsFrom(management);
5353
configurations.getByName("testFixturesRuntimeClasspath").extendsFrom(management);
5454
});
55+
plugins.withType(OptionalDependenciesPlugin.class, (optionalDependencies) -> configurations
56+
.getByName(OptionalDependenciesPlugin.OPTIONAL_CONFIGURATION_NAME).extendsFrom(management));
5557
plugins.withType(MavenPublishPlugin.class, (mavenPublish) -> {
5658
PublishingExtension publishing = project.getExtensions().getByType(PublishingExtension.class);
5759
publishing.getPublications().withType(MavenPublication.class, (mavenPublication -> {

buildSrc/src/main/java/org/springframework/shell/gradle/ModulePlugin.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ class ModulePlugin implements Plugin<Project> {
3030
public final void apply(Project project) {
3131
PluginManager pluginManager = project.getPluginManager();
3232
pluginManager.apply(JavaPlugin.class);
33+
pluginManager.apply(OptionalDependenciesPlugin.class);
3334
pluginManager.apply(ManagementConfigurationPlugin.class);
3435
pluginManager.apply(JavaLibraryPlugin.class);
3536
pluginManager.apply(SpringMavenPlugin.class);
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/*
2+
* Copyright 2022 the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package org.springframework.shell.gradle;
17+
18+
import org.gradle.api.Plugin;
19+
import org.gradle.api.Project;
20+
import org.gradle.api.artifacts.Configuration;
21+
import org.gradle.api.plugins.JavaPlugin;
22+
import org.gradle.api.plugins.JavaPluginExtension;
23+
import org.gradle.api.tasks.SourceSetContainer;
24+
25+
public class OptionalDependenciesPlugin implements Plugin<Project> {
26+
27+
public static final String OPTIONAL_CONFIGURATION_NAME = "optional";
28+
29+
@Override
30+
public void apply(Project project) {
31+
Configuration optional = project.getConfigurations().create(OPTIONAL_CONFIGURATION_NAME);
32+
optional.setCanBeConsumed(false);
33+
optional.setCanBeResolved(false);
34+
project.getPlugins().withType(JavaPlugin.class, (javaPlugin) -> {
35+
SourceSetContainer sourceSets = project.getExtensions().getByType(JavaPluginExtension.class)
36+
.getSourceSets();
37+
sourceSets.all((sourceSet) -> {
38+
project.getConfigurations().getByName(sourceSet.getCompileClasspathConfigurationName())
39+
.extendsFrom(optional);
40+
project.getConfigurations().getByName(sourceSet.getRuntimeClasspathConfigurationName())
41+
.extendsFrom(optional);
42+
});
43+
});
44+
}
45+
}

buildSrc/src/main/java/org/springframework/shell/gradle/PublishAllJavaComponentsPlugin.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
import org.gradle.api.Action;
1919
import org.gradle.api.Plugin;
2020
import org.gradle.api.Project;
21-
import org.gradle.api.component.SoftwareComponent;
2221
import org.gradle.api.plugins.JavaPlatformPlugin;
2322
import org.gradle.api.plugins.JavaPlugin;
2423
import org.gradle.api.publish.PublishingExtension;

buildSrc/src/main/java/org/springframework/shell/gradle/SpringMavenPlugin.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
import org.gradle.api.Plugin;
2222
import org.gradle.api.Project;
2323
import org.gradle.api.attributes.Usage;
24+
import org.gradle.api.component.AdhocComponentWithVariants;
25+
import org.gradle.api.component.ConfigurationVariantDetails;
2426
import org.gradle.api.plugins.JavaPlugin;
2527
import org.gradle.api.plugins.JavaPluginExtension;
2628
import org.gradle.api.plugins.PluginManager;
@@ -60,6 +62,35 @@ public void apply(Project project) {
6062

6163
private void customizeMavenPublication(MavenPublication publication, Project project) {
6264
customizePom(publication.getPom(), project);
65+
project.getPlugins().withType(JavaPlugin.class)
66+
.all((javaPlugin) -> customizeJavaMavenPublication(publication, project));
67+
suppressMavenOptionalFeatureWarnings(publication);
68+
}
69+
70+
private void customizeJavaMavenPublication(MavenPublication publication, Project project) {
71+
addMavenOptionalFeature(project);
72+
publication.versionMapping((strategy) -> strategy.usage(Usage.JAVA_API, (mappingStrategy) -> mappingStrategy
73+
.fromResolutionOf(JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME)));
74+
publication.versionMapping(
75+
(strategy) -> strategy.usage(Usage.JAVA_RUNTIME, VariantVersionMappingStrategy::fromResolutionResult));
76+
}
77+
78+
private void suppressMavenOptionalFeatureWarnings(MavenPublication publication) {
79+
publication.suppressPomMetadataWarningsFor("mavenOptionalApiElements");
80+
publication.suppressPomMetadataWarningsFor("mavenOptionalRuntimeElements");
81+
}
82+
83+
private void addMavenOptionalFeature(Project project) {
84+
JavaPluginExtension extension = project.getExtensions().getByType(JavaPluginExtension.class);
85+
extension.registerFeature("mavenOptional",
86+
(feature) -> feature.usingSourceSet(extension.getSourceSets().getByName("main")));
87+
AdhocComponentWithVariants javaComponent = (AdhocComponentWithVariants) project.getComponents()
88+
.findByName("java");
89+
if (javaComponent != null) {
90+
javaComponent.addVariantsFromConfiguration(
91+
project.getConfigurations().findByName("mavenOptionalRuntimeElements"),
92+
ConfigurationVariantDetails::mapToOptional);
93+
}
6394
}
6495

6596
private void customizePom(MavenPom pom, Project project) {

spring-shell-core-test-support/spring-shell-core-test-support.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,5 @@ description = 'Spring Shell Core Test Support'
77
dependencies {
88
management platform(project(":spring-shell-management"))
99
implementation project(':spring-shell-core')
10-
api('org.assertj:assertj-core')
10+
optional('org.assertj:assertj-core')
1111
}

0 commit comments

Comments
 (0)