У меня была та же проблема, что и у вас, и я пришел с решением.Возможно, это не самое лучшее, но это работает ...
Сначала вам нужно два приложения:
Application.java
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
WarApplication
@SpringBootApplication
public class WarApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(WarApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(WarApplication.class, args);
}
}
После этого вам нужно изменить pom.xml
следующим образом:
<profiles>
<profile>
<id>tomcat</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<project.packaging>war</project.packaging>
<project.start-class>com.whatever.WarApplication</project.start-class>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
</profile>
<profile>
<id>springboot</id>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<properties>
<project.packaging>jar</project.packaging>
<project.start-class>com.whatever.Application</project.start-class>
</properties>
</profile>
</profiles>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler-plugin.version}</version>
<inherited>true</inherited>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!-- Package as an executable jar/war -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring.boot.version}</version>
<configuration>
<profiles>
<profile>tomcat</profile>
<profile>springboot</profile>
</profiles>
<mainClass>${project.start-class}</mainClass>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
По сути, вы просто создаете профили в зависимости от того, где вы должны развернуть,Но если вам нужно только развернуть на tomcat, вы можете удалить профили.Что важно важно в этом помпе, это <scope>provided</scope>
в профиле кота. Здесь - ссылка на Традиционное развертывание из Spring doc.