Set kotlin.version when Kotlin's Gradle plugin is applied
Closes gh-11711
This commit is contained in:
@@ -4,6 +4,8 @@
|
||||
When another plugin is applied the Spring Boot plugin reacts by making various changes
|
||||
to the project's configuration. This section describes those changes.
|
||||
|
||||
|
||||
|
||||
[[reacting-to-other-plugins-java]]
|
||||
=== Reacting to the Java plugin
|
||||
|
||||
@@ -25,6 +27,18 @@ plugin:
|
||||
|
||||
|
||||
|
||||
[[reacting-to-other-plugins-kotlin]]
|
||||
=== Reacting to the Kotlin plugin
|
||||
|
||||
When {kotlin-plugin}[Kotlin's Gradle plugin] is applied to a project, the Spring Boot
|
||||
plugin:
|
||||
|
||||
1. Aligns the Koltin version used in Spring Boot's dependency management with the version
|
||||
of the plugin. This is achieved by setting the `kotlin.version` property with a value
|
||||
that matches the version of the Kotlin plugin.
|
||||
|
||||
|
||||
|
||||
[[reacting-to-other-plugins-war]]
|
||||
=== Reacting to the war plugin
|
||||
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
/*
|
||||
* Copyright 2012-2018 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.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.boot.gradle.plugin;
|
||||
|
||||
import org.gradle.api.Plugin;
|
||||
import org.gradle.api.Project;
|
||||
import org.gradle.api.plugins.ExtraPropertiesExtension;
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinPluginWrapper;
|
||||
|
||||
/**
|
||||
* {@link PluginApplicationAction} that reacts to Kotlin's Gradle plugin being applied by
|
||||
* configuring a {@code kotlin.version} property to align the version used for dependency
|
||||
* management for Kotlin with the version of its plugin.
|
||||
*
|
||||
* @author Andy Wilkinson
|
||||
*/
|
||||
class KotlinPluginAction implements PluginApplicationAction {
|
||||
|
||||
@Override
|
||||
public void execute(Project project) {
|
||||
String kotlinVersion = project.getPlugins().getPlugin(KotlinPluginWrapper.class)
|
||||
.getKotlinPluginVersion();
|
||||
ExtraPropertiesExtension extraProperties = project.getExtensions()
|
||||
.getExtraProperties();
|
||||
if (!extraProperties.has("kotlin.version")) {
|
||||
extraProperties.set("kotlin.version", kotlinVersion);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("unchecked")
|
||||
public Class<? extends Plugin<? extends Project>> getPluginClass() {
|
||||
try {
|
||||
return (Class<? extends Plugin<? extends Project>>) Class
|
||||
.forName("org.jetbrains.kotlin.gradle.plugin.KotlinPluginWrapper");
|
||||
}
|
||||
catch (Throwable ex) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2012-2017 the original author or authors.
|
||||
* Copyright 2012-2018 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.
|
||||
@@ -30,9 +30,9 @@ interface PluginApplicationAction extends Action<Project> {
|
||||
|
||||
/**
|
||||
* The class of the {@code Plugin} that, when applied, will trigger the execution of
|
||||
* this action.
|
||||
* this action. May return {@code null} if the plugin class is not on the classpath.
|
||||
*
|
||||
* @return the plugin class
|
||||
* @return the plugin class or {@code null}
|
||||
*/
|
||||
Class<? extends Plugin<? extends Project>> getPluginClass();
|
||||
|
||||
|
||||
@@ -108,10 +108,15 @@ public class SpringBootPlugin implements Plugin<Project> {
|
||||
new JavaPluginAction(singlePublishedArtifact),
|
||||
new WarPluginAction(singlePublishedArtifact),
|
||||
new MavenPluginAction(bootArchives.getUploadTaskName()),
|
||||
new DependencyManagementPluginAction(), new ApplicationPluginAction());
|
||||
new DependencyManagementPluginAction(), new ApplicationPluginAction(),
|
||||
new KotlinPluginAction());
|
||||
for (PluginApplicationAction action : actions) {
|
||||
project.getPlugins().withType(action.getPluginClass(),
|
||||
(plugin) -> action.execute(project));
|
||||
Class<? extends Plugin<? extends Project>> pluginClass = action
|
||||
.getPluginClass();
|
||||
if (pluginClass != null) {
|
||||
project.getPlugins().withType(pluginClass,
|
||||
(plugin) -> action.execute(project));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user