From 10a2471979560c8e7abc04bbab91ac9941c48144 Mon Sep 17 00:00:00 2001 From: Yanming Zhou Date: Thu, 21 Jul 2022 10:42:04 +0800 Subject: [PATCH] Take MethodType into account to deduce main application class See gh-31828 --- .../java/org/springframework/boot/SpringApplication.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/SpringApplication.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/SpringApplication.java index d7adbea7696..4e033eb9f0a 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/SpringApplication.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/SpringApplication.java @@ -17,6 +17,7 @@ package org.springframework.boot; import java.lang.StackWalker.StackFrame; +import java.lang.invoke.MethodType; import java.time.Duration; import java.util.ArrayList; import java.util.Arrays; @@ -165,6 +166,7 @@ import org.springframework.util.StringUtils; * @author Brian Clozel * @author Ethan Rubinson * @author Chris Bono + * @author Yanming Zhou * @since 1.0.0 * @see #run(Class, String[]) * @see #run(Class[], String[]) @@ -283,8 +285,10 @@ public class SpringApplication { } private Optional> findMainClass(Stream stack) { - return stack.filter((frame) -> Objects.equals(frame.getMethodName(), "main")).findFirst() - .map(StackWalker.StackFrame::getDeclaringClass); + return stack + .filter((frame) -> Objects.equals(frame.getMethodName(), "main") + && Objects.equals(frame.getMethodType(), MethodType.methodType(void.class, String[].class))) + .findFirst().map(StackWalker.StackFrame::getDeclaringClass); } /**