Take MethodType into account to deduce main application class

See gh-31828
This commit is contained in:
Yanming Zhou
2022-07-21 10:42:04 +08:00
committed by Andy Wilkinson
parent add720594e
commit 10a2471979

View File

@@ -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<Class<?>> findMainClass(Stream<StackFrame> 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);
}
/**