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.

  1. Das Deploy-Modul kann wie ein normales Applikationsmodul behandelt werden. Alle Einstellungen und Konfigurationsdateien liegen an derselben Stelle wie in einer regulären Applikation.
  2. 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.