WAR bauen
In einem TopLogic-App-Modul (vgl. Applikation erstellen) kann ein lauffähiges WAR über mvn package
gebaut werden. Dabei ist zu beachten, dass beim Deployment die Anwendungskonfiguration möglicherweise für die Zielumgebung angepasst werden muss.
mvn package
In der Standardkonfiguration wird das WAR mit der identischen Konfiguration gebaut, in der die Anwendung auch in der Entwicklungsumgebung läuft. D.h. es werden die Konfigurationsdateien mit eingebaut, die sich in dem Ordner deploy/local/webapp
befinden. I.d.R. wird hier eine embedded H2-Datenbank verwendet:
[INFO] Scanning for projects...
[INFO]
[INFO] ----------------------< com.top-logic:tl-bpe-app >----------------------
[INFO] Building tl-bpe-app 7.6.0
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
...
[INFO] Packaging application
[INFO] Building war: .../target/tl-bpe-app-7.6.0-app.war
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
Sollen diese Einstellungen für das Deployment angepasst werden, können entweder weitere Deploy-Ordner angelegt und diese über Maven-Profile im Deployment aktiviert werden, oder es können pro Zielumgebung spezielle Deploy-Module angelegt werden (siehe unten).
Deploy-Ordner für Anpassungen im Deployment
Konfigurationen, die speziell für eine Zielumgebung sind, können in einem Deploy-Ordner gesammelt werden. Als Beispiel soll die Anwendung für das Deployment mit einer Datenbank-Konfigurationsdatei für eine Oracle-Datenbank ausgestattet werden.
Es wird der Deploy-Ordner "productive
" mit der Datei deploy/productive/webapp/WEB-INF/conf/metaConf.txt
angelegt:
db-default.xml
db-oracle.xml
Beim Deployment soll jetzt statt deploy/local
dieser Deploy-Ordner verwendet werden. Hierfür wird im pom.xml
der Applikation das Property deployAspects
auf den Deploy-Ordner-Namen gesetzt:
<properties>
<deployAspects>productive</deployAspects>
</properties>
Wenn unterschiedliche Konfigurationen für mehrere Zielumgebungen hinterlegt werden sollen, dann kann das Property statt in der globalen Properties-Sektion der Applikation auch in einem Profil gesetzt werden:
<profiles>
<profile>
<id>productive</id>
<properties>
<deployAspects>productive</deployAspects>
</properties>
</profile>
</profiles>
In diesem Fall wird die entsprechende Deployment-Konfiguration über das Profil productive
aktiviert:
mvn -P productive package
Deploy-Modul
Die Deploy-Aspekte lassen sich auch ganz von der eigentlichen Applikation trennen und in ein Deploy-Modul auslagern. Ein solches Deploy-Modul besteht nur aus einem pom.xml
und optional zusätzlichen Konfigurationsdateien. Für eine Applikation my.company:my-app:1.0
wird über den Maven-Archetyp tl-archetype-deploy
folgendermaßen ein Deploy-Modul my.company:my-app-deploy:1.0
angelegt:
mvn -P tl-dev archetype:generate \
-DarchetypeGroupId=com.top-logic \
-DarchetypeArtifactId=tl-archetype-deploy \
-DarchetypeVersion=7.6.0 \
\
-DgroupId=my.company \
-DartifactId=my-app-deploy \
-Dversion=1.0 \
\
-DappGroupId=my.company \
-DappArtifactId=my-app \
-DappVersion=1.0
Hierbei geben die Parameter groupId
, artifactId
und version
die Koordinaten des zu erstellenden Deploy-Moduls an. Die von diesem Deploy-Modul gebaute Applikation wird über appGroupId
, appArtifactId
und appVersion
spezifiziert. Die Parameter appGroupId
und appVersion
können weggelassen werden, da sie standardmäßig mit der gebauten Applikation übereinstimmen.
In dem Deploy-Modul kann dann die Applikation gebaut werden:
cd my-app-deploy
mvn -P with-h2 clean package
Deploy-Module haben gegenüber den Deploy-Ordnern innerhalb des Applikationsmoduls entscheidende Vorteile.
- Das Deploy-Modul kann wie ein normales Applikationsmodul behandelt werden. Alle Einstellungen und Konfigurationsdateien liegen an derselben Stelle wie in einer regulären Applikation.
- Das Build der Applikation kann von ihrem Deployment getrennt werden. Ein Deploy-Modul kann ein WAR für eine fertig gebaute Anwendung erzeugen, deren Artefakte aus einem Repository geladen werden können. So ist es möglich mehrere WARs in unterschiedlicher Konfiguration für dieselbe Applikation zu bauen, ohne die Applikation selbst mehrfach bauen zu müssen. Mit einem Deploy-Ordner muss immer die komplette Applikation gebaut werden, um ein WAR zu erzeugen.