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>
|
<groupId>org.apache.commons</groupId>
|
||||||
<artifactId>commons-compress</artifactId>
|
<artifactId>commons-compress</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.jetbrains.kotlin</groupId>
|
||||||
|
<artifactId>kotlin-gradle-plugin</artifactId>
|
||||||
|
<version>${kotlin.version}</version>
|
||||||
|
<optional>true</optional>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<build>
|
<build>
|
||||||
<plugins>
|
<plugins>
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,8 @@
|
||||||
When another plugin is applied the Spring Boot plugin reacts by making various changes
|
When another plugin is applied the Spring Boot plugin reacts by making various changes
|
||||||
to the project's configuration. This section describes those changes.
|
to the project's configuration. This section describes those changes.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[[reacting-to-other-plugins-java]]
|
[[reacting-to-other-plugins-java]]
|
||||||
=== Reacting to the Java plugin
|
=== 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-other-plugins-war]]
|
||||||
=== Reacting to the war plugin
|
=== 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");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with 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
|
* 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();
|
Class<? extends Plugin<? extends Project>> getPluginClass();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -108,10 +108,15 @@ public class SpringBootPlugin implements Plugin<Project> {
|
||||||
new JavaPluginAction(singlePublishedArtifact),
|
new JavaPluginAction(singlePublishedArtifact),
|
||||||
new WarPluginAction(singlePublishedArtifact),
|
new WarPluginAction(singlePublishedArtifact),
|
||||||
new MavenPluginAction(bootArchives.getUploadTaskName()),
|
new MavenPluginAction(bootArchives.getUploadTaskName()),
|
||||||
new DependencyManagementPluginAction(), new ApplicationPluginAction());
|
new DependencyManagementPluginAction(), new ApplicationPluginAction(),
|
||||||
|
new KotlinPluginAction());
|
||||||
for (PluginApplicationAction action : actions) {
|
for (PluginApplicationAction action : actions) {
|
||||||
project.getPlugins().withType(action.getPluginClass(),
|
Class<? extends Plugin<? extends Project>> pluginClass = action
|
||||||
(plugin) -> action.execute(project));
|
.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