2016-03-30 15 views
9

Stavo cercando di impacchettare un'applicazione di avvio a molla come una guerra. Secondo this, ho modificato la mia classe di applicazione:È richiesto Web.xml per distribuire un'applicazione di avvio a molla

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

ha anche aggiunto il seguente nel mio pom.xml

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

Quando ho confezionare il progetto, però, ho ottenuto il seguente errore:

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

Mentre stavo leggendo l'applicazione di avvio di primavera, non ho mai visto nulla sulla creazione di un web.xml. Web.xml è richiesto nella distribuzione di un'applicazione di avvio a molla come guerra?

+1

avete aggiunto 'primavera-boot-starter-web 'come dipendenza? Per maggiori informazioni vedi: https://docs.spring.io/spring-boot/docs/current/reference/html/build-tool-plugins-maven-plugin.html#build-tool-plugins-maven-packaging – Aliaxander

+0

@Aliaxander si, ma dovrei specificare l'ambito come previsto anche per questo? – Nasreddin

+0

No, non dovresti. – Aliaxander

risposta

12

Secondo this risposta rendere Maven ignorare la web.xml assenza aggiungendo il seguente frammento al pom.xml:

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

In realtà non è necessario il file web.xml per creare il materiale WAR pronto per essere distribuito. Ecco come costruisco artefatti basati su Spring Boot utilizzando 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" 
} 

Al fine di costruire WAR, si dovrebbe eseguire:

gradle war

+0

Non ho familiarità con gradle. Come lo impacchetta con Maven? – Nasreddin

+0

@Nasreddin with maven, usa 'pacchetto mvn' –

2

Avete le dipendenze web.

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

Si può sempre avere il vostro web.xml se avete bisogno di qualche configurazione su di esso, è sufficiente posizionare il file nella cartella corretta nel WEB-INF in modo molla può prendere una lettura delle configurazioni. Anche cambiare la confezione per

<packaging>war</packaging> 

Considerate pure utilizzare il pom genitore per la primavera-boot come

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

Questa configurazione

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

solo dire a Maven di non includere le dipendenze Tomcat nel file di guerra, per evitare interferenze con il fornitore di servlet.

Problemi correlati