У меня есть проект, использующий Spring Boot 2.0.0.RC2. Мне нужно развернуть его в клиентской среде, используя традиционное развертывание для Tomcat 7.0.82. Мне удалось создать войну, которую можно успешно развернуть, настроив web.xml
типичным способом для приложений Spring (с DispatcherServlet) вместо использования SpringBootServletInitializer
.
Я также хотел бы иметь быстрый способ запуска приложения в локальной среде с использованием встроенного контейнера Tomcat, просто запустив основной метод в классе приложения с аннотацией @SpringBootApplication
. Он отлично работает, если я использую версию Tomcat по умолчанию (8.5.28). Однако я хотел бы запустить встроенный контейнер и в версии 7.0.82. Это важно для меня по другой причине — я использую SpringBootTest, и было бы неплохо, если бы эти тесты выполнялись в том же контейнере, что и клиентская среда. К сожалению, я не могу использовать родительский POM Spring Boot и переопределить свойство tomcat.version
.
Я пробовал @SpringBootApplication(exclude = ServletWebServerFactoryAutoConfiguration.class)
создать TomcatServletWebServerFactory
компонент вручную
@Bean
public ServletWebServerFactory tomcatServletWebServerFactory() {
return new TomcatServletWebServerFactory();
}
и явно добавьте зависимости tomcat 7.0.82 в pom.xml
(${tomcat.version} = 7.0.82):
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
<exclusions>
<exclusion>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-annotations-api</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-core</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-el</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-websocket</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-annotations-api</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-util</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-core</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-el</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-websocket</artifactId>
<version>${tomcat.version}</version>
</dependency>
но я все еще получаю ошибку java.lang.NoClassDefFoundError: org/apache/tomcat/util/scan/StandardJarScanFilter
.
Не могли бы вы сообщить, есть ли способ удовлетворить мои требования?