web-dev-qa-db-fra.com

Le fichier web.xml est-il requis pour déployer une application de démarrage à ressort?

J'essayais de conditionner une application de démarrage de printemps comme une guerre. Selon this , j'ai modifié ma classe d'application:

@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);
     }
}

Aussi ajouté ce qui suit dans mon pom.xml

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

Cependant, lorsque je compresse le projet, j'ai le message d'erreur suivant:

[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]

En lisant l'application de démarrage printanier, je n'ai jamais rien vu sur la création d'un fichier web.xml. Est-ce que web.xml est requis pour le déploiement de l'application Spring Boot en tant que guerre?

11
Nasreddin

Selon this answer, faites en sorte que Maven ignore l’absence de web.xml en ajoutant l’extrait de code suivant à votre pom.xml:

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

Avez-vous les dépendances web.

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

Si vous avez besoin de configuration, vous pouvez toujours avoir votre fichier web.xml. Il vous suffit de placer le fichier dans le dossier approprié dans WEB-INF pour que Spring puisse le consulter et en prendre connaissance. Changez également l'emballage en

<packaging>war</packaging>

Pensez également à utiliser le pom parent pour spring-boot 

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

Cette configuration 

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

Dites seulement à maven de ne pas inclure les dépendances Tomcat dans le fichier war, afin d'éviter toute interférence avec le fournisseur de servlet.

2
Koitoer

Vous n'avez pas besoin du fichier web.xml pour créer un artefact WAR prêt à être déployé ..__ Voici comment je construis des artefacts basés sur Spring Boot en utilisant 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"
}

Pour construire WAR, il faut lancer:

gradle war

0
Aliaxander

Dans les spécifications de servlet 2.5 (Java EE 5), le fichier web.xml est obligatoire. Dans les spécifications de servlet 3+ (Java EE 6), vous pouvez supprimer web.xml et utiliser à la place la configuration d'annotation. 

0
osama yaccoub