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?
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>
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.
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
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.