Ich muss gestehen, ich missbrauche meinen Blog öfters als Notizbuch für Dinge, die ich schonmal gemacht habe. Eine Veröffentlichung motiviert mich, die Inhalte besser aufzubereiten, was schlussendlich mir selbst wieder zu gute kommt, wenn ich das wieder brauche. Das ganze Gedöhns hat mich die letzten Wochen immer wieder einige Stunden gekostet …
Ein neues Vaadin-Maven-Projekt wird so erstellt:
mvn archetype:generate -DarchetypeGroupId=com.vaadin -DarchetypeArtifactId=vaadin-archetype-clean -DarchetypeVersion=LATEST -DgroupId=de.xyz -DartifactId=xyz-projekt -Dversion=1.0 -Dpackaging=war -DarchetypeRepository=http://repo1.maven.org/maven2
Anschließend kann das Projekt mit Eclipse (Maven-Plugin vorausgesetzt) importiert werden.
Nun gibt es im generierten POV noch einige Änderungen, die durchgeführt werden müssen.
1. Java-Version einstellen.
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.7</source> <target>1.7</target> </configuration> </plugin>
Sagt dem Compiler, er soll Java7 Code erzeugen.
2. Tomcat-Plugin
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>tomcat-maven-plugin</artifactId> <version>1.0-beta-1</version> </plugin>
Ermöglicht das Maven-Goal ‚tomcat:run‘. Damit wird das Projekt auf einem Tomcat-Server deployed. Bei Vaadin ist ein Jetty Server dabei, aber wer den nicht mag oder wer später sowiso auf einem Tomcat deployed, kann ihn auch gleich verwenden 🙂
3. Maven-Datanucleus Plugin
Dies wird nur benötigt, wenn die Webapp eine Datenanbindung via Datanucleus erhalten soll
<build> <pluginmanagement> <plugins> <plugin> <groupId>org.datanucleus</groupId> <artifactId>maven-datanucleus-plugin</artifactId> <version>3.1.0-release</version> <configuration> <log4jConfiguration>${basedir}/log4j.properties</log4jConfiguration> <verbose>true</verbose> </configuration> <executions> <execution> <phase>process-classes</phase> <goals> <goal>enhance</goal> </goals> </execution> </executions> </plugin> </plugins> </pluginmanagement> </build>
Für Datanucleus-Anwender ist das echt super. Ermöglich das Goal ‚datanucleus:enhance‘. Man kann das automatische Autoenhancen in Eclipse deaktivieren. Das ist nicht nur nervig, sondern stört auch gewaltig beim Debuggen. Normalerweise ist Java in der Lage kleinere Änderungen zu hotswappen, aber nicht, wenn der Autoenhancer an jeder Datei rumfummelt, die JDO-Annotations hat.
Wichtig ist, dass diese Section unter build/pluginmanagement gehört! Ansonsten gibt es den nervigen Fehler „Plugin execution not covered by lifecycle configuration: […] (execution: default, phase: process-classes)“
Hierfür benötigt man auch die nötigen Dependencies:
<dependency> <groupId>org.datanucleus</groupId> <artifactId>datanucleus-core</artifactId> <version>3.1.0-release</version> <scope>runtime</scope> <!-- WICHTIG! --> </dependency> <dependency> <groupId>org.datanucleus</groupId> <artifactId>datanucleus-api-jdo</artifactId> <version>3.1.0-release</version> </dependency> <dependency> <groupId>org.datanucleus</groupId> <artifactId>datanucleus-rdbms</artifactId> <version>3.1.0-release</version> </dependency>
4. GWT-Compiler für eigene Widgets
In der POM existiert eine Section, die standardmäßig auskommentiert ist. Aktiviert man diese, kann man mit ‚vaadin:update-widgetset‘ eigene Widgets in das statische GWT-Compilat einbauen lassen.
So, das POM ist jetzt fertig. Empfohlen wird das Kompilieren mit:
mvn clean compile datanucleus:enhance tomcat:run
um seine Anwendung zu debuggen. Ersetzt man das letzte Goal mit ‚package‘, bekommt man ein schönes WAR-File, das man in den Tomcat hochladen kann.
*** work in progress ***
Es wird sich hier sicherlich noch was ändern, bzw ergänzt werden, wenn ich merke, ich hab etwas wichtiges vergessen.