Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Ich habe ein Projekt in dem ich eine RichClientApplication mit Maven "builde".
Nun brauche ich beim Testen aber eine laufende Testdatenbank das heißt ich möchte folgendes in meinen build lifecycle einbetten:
- vor dem Test: HDQLDB Server startet die Testdatenbank
-- Tests laufen durch
- nach dem Test: HSQLDB Server wird beendet
Ich habe nun versuch mittels maven exec plugin den HSQLDB Server zu starten:
Das führt aber dazu das der HSQLDB Server während der Testphase den kompletten build blockiert "Hit CTRL+C to stop the Server", außerdem sehe ich auch keine Möglichkeit den Server danach zu stoppen.
Ich bin für Vorschläge oder auch alternative Herangehensweise (BestPractice) dankbar. Wichtig ist dabei nur es muss HSQLDB sein und das der Server manuell gestartet wird ist keine Option. Außerdem sollte das ganze rein über maven wartbar bleiben sprich kein JavaSourceCode wenn möglich.
1. Arbeite mit profiles (bspw. development, integration, production) und mit abhängig vom profile gefilterten Resourcen. Damit kannst Du für jedes profile angepasste Datasources oder jdbc-Urls konfigurieren.
2. Im profile development lässt du die HSQLDB embedded laufen. Dann muss sie garnicht gestartet werden.
gemeint, nun muss ich zusätzlich zu den maven files auch javaCode warten der sich aber eigentlich nur um die Umgebung kümmert, das wollte ich gezielt vermeiden.
Ausgehend von deinem Lösungsansatz:
Wenn ich dann im production/integration bin um ein deployment zu machen will ich doch auch, dass die Tests durchlaufen, da die Tests nie auf der Produktivdatenbank laufen sollen habe ich hier wieder das selbe Problem oder ich versteh irgendwie nicht ganz wie du das mit den profiles meinst.
Ich hatte Dir zunächst nur die Stichpunkte genannt, nach denen Du bei Maven suchen musst. Selbstverständlich ist das alles rein Maven-basiert und es muss kein Java-Code angepasst werden.
Mit den profiles sagst Du Maven, welche Umgebung Du gerne hättest. Dein Programm startet und will sich nun mit der DB verbinden. Irgendwo hast Du die dafür nötige JDBC-URL ja stehen. (Ich hoffe nicht hart im Quellcode. Das wär schlecht). Normalerweise also in irgend einer properties-, xml-, ini- oder sonstwas Konfiugrationsdatei. Das ist die Resource. Abhängig vom gewählten Profil müsste man dynamisch die richtige JDBC-URL in diese Datei schreiben. Das nennt man filtern. Und Maven kann das alles. Suche nach den Stichpunken "Maven profiles" und "Maven resource filtering" und Du findest alles, was Du brauchst
Der Zusammenhang mit den resource filtering war mir nicht ganz klar, ich habe die jdbc url natürlich nicht hardcoded sondern injecte sie mittels Spring.
Aber das starten des Datenbankservers im embedded mode erfordert, dass ich das in Java schreibe.
Java:
import org.hsqldb.Server;
//...
hsqlServer = new Server();
//...
hsqlServer.start();
und genau das ist es was ich ja eigentlich vermeiden wollte, da nicht sichergestellt ist, das es sich bei der Testumgebung immer um eine HSQLDB Datenbank handelt deshalb injecte ich ja auch die jdbc url und den JDBCTreiber. Daher möchte ich den Testserver falls ein HSQLDB-Server benötigt wird eben auch über maven starten. Ziel ist es die komplette Testumgebung wechseln zu können ohne eine Zeile am Testcode hinzuzufügen oder zu verändern.
zuerst einmal fällt mir auf, dass Du beim exec-plugin das java Goal verwendest, was nun mal in der gleichen VM läuft wie Maven, was selbstverständlich nicht funktionieren kann. Du musst das Goal "exec" verwenden, um eben einen anderen Prozess zu starten in dem die DB läuft...
Abgesehen davon sind die Tests hier korrekterweise Integrationstest und keine Unit Tests. Damit ist es nicht die Aufgabe von maven-surefire-plugin sondern vom maven-failsafe-plugin.
Dazu gibt es dann die Phase pre-integration-test, integration-test und post-integration-test....
Ich würde hier ein separated Maven Module applikation-it-hsqldb machen in dem alles für die HSQLDB konfiguriert wird und während der IntegrationsTests phase eben der Server gestartet wird...
Wenn Du eine andere DB nutzen möchtest mach ein module applikation-it-was-auch-immer-für-eine-DB ...
Diese Module werden dann einfach mithilfe eines Profile entsprechend aktiviert...