2017-10-04 2 views
1

Je tente de déployer une application minimale Vaadin/SpringBoot en tant que fichier WAR dans un Tomcat autonome.Déploiement de Vaadin/SpringBoot en tant que WAR

Tout fonctionne si je cours gradle vaadinRun et l'accès sous localhost:8080, mais la création du fichier WAR avec gradle war puis le copier dans le dossier webapps de mes résultats Tomcat dans un 404. Malheureusement les journaux Tomcat ne montrent rien. Essayer d'accéder via localhost:8080/hello-vaadin.

Voici la classe application elle-même:

package com.somecompany; 

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
import org.springframework.boot.SpringApplication; 
import org.springframework.boot.autoconfigure.SpringBootApplication; 
import org.springframework.context.annotation.Bean; 
import org.springframework.boot.autoconfigure.*; 
import org.springframework.boot.builder.SpringApplicationBuilder; 
import org.springframework.boot.web.support.SpringBootServletInitializer; 
import org.springframework.boot.web.servlet.ServletRegistrationBean; 
import org.springframework.boot.web.servlet.ServletComponentScan; 
import com.vaadin.spring.annotation.EnableVaadin; 

@ServletComponentScan 
@SpringBootApplication 
@EnableVaadin 
public class Application extends SpringBootServletInitializer { 

    public static void main(String[] args) throws Exception { 
     configureApplication(new SpringApplicationBuilder()).run(args); 
    } 

    @Override 
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { 
     return configureApplication(builder); 
    } 

    private static SpringApplicationBuilder configureApplication(SpringApplicationBuilder builder) { 
     return builder.sources(Application.class); 
    } 

} 

Ceci est l'interface utilisateur-classe correspondante:

package com.somecompany; 

import com.vaadin.annotations.Theme; 
import com.vaadin.spring.annotation.SpringUI; 
import com.vaadin.server.VaadinRequest; 
import com.vaadin.ui.UI; 
import com.vaadin.ui.Grid; 
import org.springframework.beans.factory.annotation.Autowired; 
import com.vaadin.ui.Label; 

@SpringUI 
@Theme("valo") 
public class HelloWorldUI extends UI { 

    @Autowired 
    public HelloWorldUI() { 

    } 

    @Override 
    protected void init(VaadinRequest request) { 
     setContent(new Label("Hello World!")); 
    } 

} 

Et enfin mon script gradle:

plugins { 
    id "java" 
    id "com.devsoap.plugin.vaadin" version "1.2.4" 
    id "org.springframework.boot" version "1.5.7.RELEASE" 
} 

jar { 
    baseName = 'com.somecompany.hello-vaadin' 
    version = '0.0.1-SNAPSHOT' 
} 

apply plugin: 'war' 

war { 
    baseName = 'hello-vaadin' 
    version = '1.0' 
} 

springBoot { 
    mainClass = 'com.somecompany.Application' 
} 

bootRepackage { 
    mainClass = 'com.somecompany.Application' 
} 

repositories { 
    jcenter() 
    mavenCentral() 
    maven { url "http://oss.sonatype.org/content/repositories/vaadin-snapshots/" } 
    maven { url 'https://repo.spring.io/libs-release' } 
    maven { url "https://repository.jboss.org/nexus/content/repositories/releases" } 
} 

dependencies { 
    compile("org.springframework.boot:spring-boot-starter-web") 
    providedRuntime("org.springframework.boot:spring-boot-starter-tomcat") 
} 

Après avoir traversé tutoriel après le tutoriel, il doit y avoir quelque chose que je néglige. Mais quoi, je ne vois pas quel pourrait être le problème?

Des indices très appréciés!

+0

En tant qu'utilisateur maven j'ai besoin du spring-boot-maven-plugin, peut-être qu'il y a aussi un équivalent pour gradle? – mrkernelpanic

+0

@Jay Oui, je peux voir l'application de la page du gestionnaire. – Tobias

+0

@mrkernelpanic Cela devrait être fait avec dans la 4ème ligne, le plugin org.springframework.boot. – Tobias

Répondre

2

Enfin, j'ai réussi à le faire fonctionner. Voici comment:

MyApplication.java

package com.somecompany; 

import org.springframework.boot.SpringApplication; 
import org.springframework.boot.autoconfigure.SpringBootApplication; 

@SpringBootApplication 
public class MyApplication { 
    public static void main(String[] args) throws Exception { 
     SpringApplication.run(MyApplication.class, args); 
    } 
} 

MyServletInitializer.java

package com.somecompany; 

import org.springframework.boot.web.support.SpringBootServletInitializer; 
import org.springframework.boot.builder.SpringApplicationBuilder; 

public class MyServletInitializer extends SpringBootServletInitializer { 
    @Override 
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { 
     return builder.sources(MyApplication.class); 
    } 
} 

MyConfiguration.java

package com.somecompany; 

import org.springframework.context.annotation.Configuration; 
import org.springframework.context.annotation.Bean; 

@Configuration 
public class MyConfiguration { 
    @Bean 
    public String myLabelString() { 
     return "Hello World Bean!"; 
    } 
} 

HelloWorldUI.java

package com.somecompany; 

import com.vaadin.spring.annotation.SpringUI; 
import com.vaadin.server.VaadinRequest; 
import com.vaadin.ui.UI; 
import org.springframework.beans.factory.annotation.Autowired; 
import com.vaadin.ui.Label; 

@SpringUI 
public class HelloWorldUI extends UI { 

    @Autowired 
    String helloWorldString; 

    @Override 
    protected void init(VaadinRequest request) { 
     if (helloWorldString != null) { 
      setContent(new Label(helloWorldString)); 
     } else { 
      setContent(new Label("Injection does not work!")); 
     } 
    } 
} 

build.gradle

plugins { 
    id 'com.devsoap.plugin.vaadin' version '1.2.1' 
    id 'org.springframework.boot' version '1.5.3.RELEASE' 
} 

apply plugin: 'war' 

war { 
    baseName = 'hellovaadin' 
} 

springBoot { 
    mainClass = 'com.somecompany.MyApplication' 
} 

Puis, avec gradle build je construis le fichier WAR puis copiez-le dans le dossier webapps de mon instance tomcat.

J'ai prolongé l'exemple en montrant également comment injecter/autowire un bean.

+0

Vous pourriez même améliorer votre code en utilisant injection de champ iso injection de champ. – Thibstars