Browse Source

Take MethodType into account to deduce main application class

See gh-31828
pull/31863/head
Yanming Zhou 4 years ago committed by Andy Wilkinson
parent
commit
10a2471979
  1. 8
      spring-boot-project/spring-boot/src/main/java/org/springframework/boot/SpringApplication.java

8
spring-boot-project/spring-boot/src/main/java/org/springframework/boot/SpringApplication.java

@ -17,6 +17,7 @@ @@ -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; @@ -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 { @@ -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);
}
/**

Loading…
Cancel
Save