it-roy-ru.com

Требуется ли web.xml для развертывания приложения с весенней загрузкой?

Я пытался упаковать приложение весенней загрузки как войну. Согласно это , я изменил свой класс приложения:

@SpringBootApplication
@EntityScan({"org.mdacc.rists.cghub.model"}) 
@EnableJpaRepositories(basePackages = {"org.mdacc.rists.cghub.ws.repository"})
public class Application extends SpringBootServletInitializer
{

    public static void main( String[] args )
    {
        SpringApplication.run(Application.class, args);
    }

    @Override
     protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
         return application.sources(Application.class);
     }
}

Также добавил следующее в моем pom.xml

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-Tomcat</artifactId>
    <scope>provided</scope>
</dependency>

Когда я упаковываю проект, я получаю следующую ошибку:

[ERROR] Failed to execute goal org.Apache.maven.plugins:maven-war-plugin:2.2:war (default-war) on project cg-web: Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update mode) -> [Help 1]

Когда я читал о весеннем загрузочном приложении, я никогда не видел ничего о создании web.xml. Требуется ли web.xml при развертывании весеннего загрузочного приложения на войне?

11
Nasreddin

Согласно this answer make Maven игнорируйте отсутствие web.xml, добавив следующий фрагмент в свой pom.xml:

<plugin>
  <artifactId>maven-war-plugin</artifactId>
  <version>2.6</version>
  <configuration>
    <failOnMissingWebXml>false</failOnMissingWebXml>
  </configuration>
</plugin>
19
Aliaxander

У вас есть веб-зависимости.

  <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
  </dependency>

Вы всегда можете иметь свой web.xml, если вам нужна некоторая конфигурация, просто поместите файл в нужную папку в WEB-INF, чтобы Spring мог прочитать его. Также измените упаковку на

<packaging>war</packaging>

Рассмотрим также использование родительского pom для весенней загрузки, так как 

   <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.3.2.RELEASE</version>
    </parent>

Эта конфигурация 

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-Tomcat</artifactId>
    <scope>provided</scope>
</dependency>

Только попросите maven не включать зависимости Tomcat в файл war, чтобы избежать вмешательства с поставщиком сервлетов.

2
Koitoer

На самом деле вам не нужен файл web.xml для создания артефакта WAR, готового к развертыванию . Вот как я строю артефакты на основе Spring Boot, используя Gradle .

build.gradle:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath "org.springframework.boot:spring-boot-gradle-plugin:1.3.3.RELEASE"
    }
}

apply plugin: 'war'
apply plugin: 'spring-boot'

repositories {
    mavenCentral()
}

dependencies {
    compile "org.springframework.boot:spring-boot-starter-web:1.3.3.RELEASE"

    //Allows to run spring boot app on standalone Tomcat instance
    providedRuntime "org.springframework.boot:spring-boot-starter-Tomcat:1.3.3.RELEASE"
}

Для построения WAR необходимо выполнить:

gradle war

0
Aliaxander

В спецификациях сервлетов 2.5 (Java EE 5) web.xml является обязательным, в спецификациях сервлетов 3+ (Java EE 6) вы можете удалить web.xml и использовать вместо этого конфигурацию аннотаций 

0
osama yaccoub