Ich bin relativ neu in vaadin und begann mit einer Spring-Boot-Anwendung und dem Vaadin Spring Boot-Plugin. Alles hat gut funktioniert, bis ich an den Punkt kam, an dem ich versuchte, meine eigenen Komponenten/Widgets zu erstellen.Vaadin Custom Komponenten/Widgets mit Maven und Spring Boot
Leider habe ich kein "offizielles" Beispiel/Dokumentation gefunden, wie man benutzerdefinierte Komponenten in einer Spring Boot-Anwendung einrichten kann, also musste ich im Internet suchen, um herauszufinden, wie man zusätzliche Plugins in maven einrichtet kompilieren Sie den Code für die clientseitigen Widgets. Soweit ich die Zusammenstellung dieser Komponenten Arbeiten erzählen von der Protokollausgabe kann, aber wenn ich versuche, auf der Webseite diese Komponenten zugreifen bekomme ich einen Fehler:
Widgetset 'com.vaadin.DefaultWidgetSet' does not contain implementation for net.gtidev.test.components.MyComponent. Check its component connector's @Connect mapping, widgetsets GWT module description file and re-compile your widgetset. [...]
Hier ist das Widget Compiler log:
[INFO] Using com.vaadin:vaadin-client-compiler version 7.6.4
[ERROR] Mar 22, 2016 10:22:43 AM java.util.prefs.WindowsPreferences <init>
[ERROR] WARNUNG: Could not open/create prefs root node Software\JavaSoft\Prefs at root 0x80000002. Windows RegCreateKeyEx(...) returned error code 5.
[INFO] Compiling module net.gtidev.test.components.TestWidgetset
[INFO] Computing all possible rebind results for 'com.vaadin.client.metadata.ConnectorBundleLoader'
[INFO] Rebinding com.vaadin.client.metadata.ConnectorBundleLoader
[INFO] Invoking generator com.vaadin.server.widgetsetutils.ConnectorBundleLoaderFactory
[INFO] Populating eager bundle
. . . . . 250 more lines
[INFO] Computing all possible rebind results for 'com.vaadin.client.ui.dd.VAcceptCriterionFactory'
[INFO] Rebinding com.vaadin.client.ui.dd.VAcceptCriterionFactory
[INFO] Invoking generator com.vaadin.server.widgetsetutils.AcceptCriteriaFactoryGenerator
[INFO] Detecting available criteria ...
[INFO] creating mapping for com.vaadin.event.dd.acceptcriteria.AcceptAll
[INFO] creating mapping for com.vaadin.event.dd.acceptcriteria.And
[INFO] creating mapping for com.vaadin.event.dd.acceptcriteria.ContainsDataFlavor
[INFO] creating mapping for com.vaadin.event.dd.acceptcriteria.SourceIs
[INFO] creating mapping for com.vaadin.ui.AbstractSelect.TargetItemIs
[INFO] creating mapping for com.vaadin.ui.AbstractSelect.AcceptItem
[INFO] creating mapping for com.vaadin.ui.Table.TableDropCriterion
[INFO] creating mapping for com.vaadin.ui.Tree.TreeDropCriterion
[INFO] creating mapping for com.vaadin.event.dd.acceptcriteria.Not
[INFO] creating mapping for com.vaadin.event.dd.acceptcriteria.Or
[INFO] creating mapping for com.vaadin.event.dd.acceptcriteria.ServerSideCriterion
[INFO] creating mapping for com.vaadin.event.dd.acceptcriteria.SourceIsTarget
[INFO] creating mapping for com.vaadin.event.dd.acceptcriteria.TargetDetailIs
[INFO] creating mapping for com.vaadin.ui.Tree.TargetInSubtree
[INFO] Done. (0seconds)
[INFO] Compiling 1 permutation
[INFO] Compiling permutation 0...
[INFO] Compile of permutations succeeded
[INFO] Compilation succeeded -- 59,217s
[INFO] Linking into C:\projects\misc\vaadin-boot\target\vaadin-boot-0.0.1-SNAPSHOT\net.gtidev.test.components.TestWidgetset
[INFO] Link succeeded
[INFO] Linking succeeded -- 0,492s
Die Dateien, die ich für meine benutzerdefinierte Komponente verwende, wurden vom Eclipse vaadin Addon in einem vaadin 7 Projekt generiert, das ich nur für diesen Zweck erstellt habe. Als ich dieses vaadin 7-Projekt in Eclipse gestartet habe, hat die Komponente funktioniert. Ich habe dann diese Dateien in mein Spring-Boot-Maven-Projekt kopiert, wo die benutzerdefinierte Komponente nicht mehr geladen wird.
Ich weiß, dass Springboot-Anwendungen einen etwas anderen Bootstrap-Mechanismus und Layout als "klassische" Webapps haben und dass unter anderem statische Ressourcen nicht aus dem webapp-Ordner, sondern aus dem Classpath:/static Ordner geladen werden. Ich denke, dass der Kern des Problems etwas mit dieser Tatsache zu tun hat, aber ich weiß nicht, was ich tun soll, um es zu beheben.
Meine Plugin-Konfiguration (Ich habe versucht, mit und ohne die kommentierten Optionen):
<plugin>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-maven-plugin</artifactId>
<version>7.6.4</version>
<configuration>
<strict>true</strict>
<force>true</force>
<!-- Enable during development to speed compiling. -->
<!-- <draftCompile>true</draftCompile>
<style>DETAILED</style> -->
<!-- End development options -->
<!--<webappDirectory>src/main/webapp/VAADIN/widgetsets</webappDirectory>-->
<modules>
<module>net.gtidev.test.components.TestWidgetset</module>
</modules>
</configuration>
<executions>
<execution>
<goals>
<goal>resources</goal>
<goal>compile</goal>
</goals>
</execution>
</executions>
</plugin>
Ich habe versucht, verschiedene Maven Kombinationen und Konfigurationen Plugin. In einem Beispiel gibt es auch eine Google-GWT-Plugin erwähnt, aber auf dem Code dieses Plugin läuft erzeugte die gleiche Protokollausgabe als Vaadin Plugin:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>gwt-maven-plugin</artifactId>
<version>2.5.1</version>
<!--<configuration>-->
<!--<webappDirectory>src/main/webapp/VAADIN/widgetsets</webappDirectory>-->
<!--<extraJvmArgs>-Xmx512M -Xss1024k</extraJvmArgs>-->
<!--<runTarget>clean</runTarget>-->
<!--<hostedWebapp>${project.build.directory}/${project.build.finalName}</hostedWebapp>-->
<!--<noServer>true</noServer>-->
<!--<port>8080</port>-->
<!--<soycDetailed>false</soycDetailed>-->
<!--</configuration>-->
<executions>
<execution>
<goals>
<goal>resources</goal>
<goal>compile</goal>
</goals>
</execution>
</executions>
</plugin>
Verwenden Sie nicht gwt-Maven-Plugin mit Vaadin 7, gwt-Maven-Plugin wurde in Vaadin 6-Serie verwendet. Ich denke, dass dein ursprünglicher Versuch fast richtig war, nur Boot schaut nicht in src/main/webapp, also muss das konfiguriert werden. Siehe meine Antwort unten. – mstahv