diff --git a/buildSrc/src/main/java/org/springframework/boot/build/optional/OptionalDependenciesPlugin.java b/buildSrc/src/main/java/org/springframework/boot/build/optional/OptionalDependenciesPlugin.java index bdf909f9c9b..90f2d79bf6d 100644 --- a/buildSrc/src/main/java/org/springframework/boot/build/optional/OptionalDependenciesPlugin.java +++ b/buildSrc/src/main/java/org/springframework/boot/build/optional/OptionalDependenciesPlugin.java @@ -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 { @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))); } } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-test-support/src/main/java/org/springframework/boot/testsupport/gradle/testkit/GradleBuild.java b/spring-boot-project/spring-boot-tools/spring-boot-gradle-test-support/src/main/java/org/springframework/boot/testsupport/gradle/testkit/GradleBuild.java index 19a1e2fbd09..c80c0806139 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-test-support/src/main/java/org/springframework/boot/testsupport/gradle/testkit/GradleBuild.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-test-support/src/main/java/org/springframework/boot/testsupport/gradle/testkit/GradleBuild.java @@ -44,9 +44,6 @@ import org.apache.http.conn.HttpClientConnectionManager; import org.gradle.testkit.runner.BuildResult; import org.gradle.testkit.runner.GradleRunner; import org.gradle.util.GradleVersion; -import org.jetbrains.kotlin.cli.common.PropertiesKt; -import org.jetbrains.kotlin.compilerRunner.KotlinLogger; -import org.jetbrains.kotlin.daemon.client.KotlinCompilerClient; import org.jetbrains.kotlin.gradle.model.KotlinProject; import org.jetbrains.kotlin.gradle.plugin.KotlinCompilerPluginSupportPlugin; import org.jetbrains.kotlin.gradle.plugin.KotlinPlugin; @@ -113,9 +110,10 @@ public class GradleBuild { new File("build/resources/main"), new File(pathOfJarContaining(LaunchScript.class)), new File(pathOfJarContaining(ClassVisitor.class)), new File(pathOfJarContaining(DependencyManagementPlugin.class)), - new File(pathOfJarContaining(PropertiesKt.class)), new File(pathOfJarContaining(KotlinLogger.class)), + new File(pathOfJarContaining("org.jetbrains.kotlin.cli.common.PropertiesKt")), + new File(pathOfJarContaining("org.jetbrains.kotlin.compilerRunner.KotlinLogger")), new File(pathOfJarContaining(KotlinPlugin.class)), new File(pathOfJarContaining(KotlinProject.class)), - new File(pathOfJarContaining(KotlinCompilerClient.class)), + new File(pathOfJarContaining("org.jetbrains.kotlin.daemon.client.KotlinCompilerClient")), new File(pathOfJarContaining(KotlinCompilerPluginSupportPlugin.class)), new File(pathOfJarContaining(LanguageSettings.class)), new File(pathOfJarContaining(ArchiveEntry.class)), new File(pathOfJarContaining(BuildRequest.class)), @@ -127,6 +125,15 @@ public class GradleBuild { new File(pathOfJarContaining(Toml.class)), new File(pathOfJarContaining(Lexer.class))); } + private String pathOfJarContaining(String className) { + try { + return pathOfJarContaining(Class.forName(className)); + } + catch (ClassNotFoundException ex) { + throw new IllegalArgumentException(ex); + } + } + private String pathOfJarContaining(Class type) { return type.getProtectionDomain().getCodeSource().getLocation().getPath(); }