Set kotlin.version when Kotlin's Gradle plugin is applied
Closes gh-11711
This commit is contained in:
parent
bdd532cc20
commit
199088b0c9
|
|
@ -29,6 +29,12 @@
|
|||
<groupId>org.apache.commons</groupId>
|
||||
<artifactId>commons-compress</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.jetbrains.kotlin</groupId>
|
||||
<artifactId>kotlin-gradle-plugin</artifactId>
|
||||
<version>${kotlin.version}</version>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<build>
|
||||
<plugins>
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,54 @@
|
|||
/*
|
||||
* 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.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
import org.springframework.boot.gradle.junit.GradleCompatibilitySuite;
|
||||
import org.springframework.boot.gradle.testkit.GradleBuild;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Integration tests for {@link KotlinPluginAction}.
|
||||
*
|
||||
* @author Andy Wilkinson
|
||||
*/
|
||||
@RunWith(GradleCompatibilitySuite.class)
|
||||
public class KotlinPluginActionIntegrationTests {
|
||||
|
||||
@Rule
|
||||
public GradleBuild gradleBuild;
|
||||
|
||||
@Test
|
||||
public void noKotlinVersionPropertyWithoutKotlinPlugin() {
|
||||
assertThat(this.gradleBuild.build("kotlinVersion").getOutput())
|
||||
.contains("Kotlin version: none");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void kotlinVersionMatchesKotlinPluginVersion() {
|
||||
String output = this.gradleBuild
|
||||
.build("kotlinVersion", "dependencies", "--configuration", "compile")
|
||||
.getOutput();
|
||||
assertThat(output).contains("Kotlin version: 1.2.10");
|
||||
assertThat(output).contains("org.jetbrains.kotlin:kotlin-stdlib-jdk8: -> 1.2.10");
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
buildscript {
|
||||
dependencies {
|
||||
classpath files(pluginClasspath.split(','))
|
||||
}
|
||||
}
|
||||
|
||||
plugins {
|
||||
id 'org.jetbrains.kotlin.jvm' version '1.2.10'
|
||||
}
|
||||
|
||||
|
||||
apply plugin: 'org.springframework.boot'
|
||||
apply plugin: 'io.spring.dependency-management'
|
||||
|
||||
dependencyManagement {
|
||||
resolutionStrategy {
|
||||
eachDependency {
|
||||
if (it.requested.group == 'org.springframework.boot') {
|
||||
it.useVersion project.bootVersion
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
mavenLocal()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
compile 'org.jetbrains.kotlin:kotlin-stdlib-jdk8'
|
||||
}
|
||||
|
||||
task kotlinVersion {
|
||||
doLast {
|
||||
def kotlinVersion = project.hasProperty('kotlin.version') ? project.getProperty('kotlin.version') : 'none'
|
||||
println "Kotlin version: ${kotlinVersion}"
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
buildscript {
|
||||
dependencies {
|
||||
classpath files(pluginClasspath.split(','))
|
||||
}
|
||||
}
|
||||
|
||||
apply plugin: 'org.springframework.boot'
|
||||
|
||||
task kotlinVersion {
|
||||
doLast {
|
||||
def kotlinVersion = project.hasProperty('kotlin.version') ? project.getProperty('kotlin.version') : 'none'
|
||||
println "Kotlin version: ${kotlinVersion}"
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue