diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/KotlinPluginAction.java b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/KotlinPluginAction.java index ccf0d0cb4d..896cc7e929 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/KotlinPluginAction.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/KotlinPluginAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2019 the original author or authors. + * Copyright 2012-2020 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. @@ -47,15 +47,8 @@ class KotlinPluginAction implements PluginApplicationAction { } @Override - @SuppressWarnings("unchecked") public Class> getPluginClass() { - try { - return (Class>) Class - .forName("org.jetbrains.kotlin.gradle.plugin.KotlinPluginWrapper"); - } - catch (Throwable ex) { - return null; - } + return KotlinPluginWrapper.class; } } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/PluginApplicationAction.java b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/PluginApplicationAction.java index 96bccf32a3..f3584f3943 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/PluginApplicationAction.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/PluginApplicationAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2019 the original author or authors. + * Copyright 2012-2020 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,11 @@ interface PluginApplicationAction extends Action { /** * The class of the {@code Plugin} that, when applied, will trigger the execution of - * this action. May return {@code null} if the plugin class is not on the classpath. - * @return the plugin class or {@code null} + * this action. + * @return the plugin class + * @throws ClassNotFoundException if the plugin class cannot be found + * @throws NoClassDefFoundError if an error occurs when defining the plugin class */ - Class> getPluginClass(); + Class> getPluginClass() throws ClassNotFoundException, NoClassDefFoundError; } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/SpringBootPlugin.java b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/SpringBootPlugin.java index 75b960507a..26178f9c0b 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/SpringBootPlugin.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/SpringBootPlugin.java @@ -18,6 +18,7 @@ package org.springframework.boot.gradle.plugin; import java.util.Arrays; import java.util.List; +import java.util.function.Consumer; import org.gradle.api.GradleException; import org.gradle.api.Plugin; @@ -119,10 +120,18 @@ public class SpringBootPlugin implements Plugin { new WarPluginAction(singlePublishedArtifact), new MavenPluginAction(bootArchives.getUploadTaskName()), new DependencyManagementPluginAction(), new ApplicationPluginAction(), new KotlinPluginAction()); for (PluginApplicationAction action : actions) { - Class> pluginClass = action.getPluginClass(); - if (pluginClass != null) { - project.getPlugins().withType(pluginClass, (plugin) -> action.execute(project)); - } + withPluginClassOfAction(action, + (pluginClass) -> project.getPlugins().withType(pluginClass, (plugin) -> action.execute(project))); + } + } + + private void withPluginClassOfAction(PluginApplicationAction action, + Consumer>> consumer) { + try { + consumer.accept(action.getPluginClass()); + } + catch (Throwable ex) { + // Plugin class unavailable. Continue. } }