Änderungen von Dokument Plugin-Entwicklung


Von Version 5.4
bearbeitet von awa
am 25.02.2022, 13:08
Änderungskommentar: Es gibt keinen Kommentar für diese Version
Auf Version 10.7
bearbeitet von awa
am 02.12.2022, 21:02
Änderungskommentar: Es gibt keinen Kommentar für diese Version

Zusammenfassung

Details

Seiteneigenschaften
Inhalt
... ... @@ -1,18 +1,17 @@
1 1  {{content/}}
2 2  
3 -== Plugins für zusätzliche Funktionalitäten ==
4 4  
5 5  {{formcycle/}} bietet ein Vielzahl von Einstiegspunkten für die Erweiterung der Standard-Funktionalitäten durch Plugins. Basierend auf den einzelnen [[Plugin-Typen>>doc:Formcycle.PluginDevelopment.Types.WebHome]] werden diese zu gewissen Zeitpunkten automatisch oder manuell angesprochen und erlauben es somit von der Ersetzung eigener Platzhalter bis hin zur Implementierung eigener Verarbeitungslogik {{formcycle/}} anzupassen. Als fundamentaler erster Schritt für die Entwicklung eigener Plugins ist hierbei das Erstellen eines entsprechenden Java-Projekts anzusehen.
6 6  
7 7  == API-Dokumentation ==
8 8  
9 -Die API-Dokumentation für {{formcycle/}} findet sich hier auf unserer Seite: [[Javadocs>>https://docs.formcycle.eu/]]
8 +Die API-Dokumentation für {{formcycle/}} findet sich hier auf unserer Seite: [[JavaScript und JavaDocs>>https://docs.formcycle.eu/]]
10 10  
11 11  == Maven-Setup ==
12 12  
13 -Zu Beginn der Entwicklung eines Plugins ist es nötig das entsprechende Entwicklungsprojekt aufzusetzten und zu konfigurieren.
12 +Zu Beginn der Entwicklung eines Plugins ist es nötig, das entsprechende Entwicklungsprojekt aufzusetzten und zu konfigurieren.
14 14  
15 -Für letzteres empfehlen wir hierbei das Build-Management-Tool [[Apache Maven>>url:https://maven.apache.org/||rel="__blank"]] zum Einsatz. Andere Build-Tools können prinzipiell benutzt werden, hier können wir aber keine Hilfe bereitstellen.
14 +Für letzteres empfehlen wir hierbei das Build-Management-Tool [[Apache Maven>>url:https://maven.apache.org/||rel="__blank"]] zu verwenden. Andere Build-Tools können prinzipiell auch genutzt werden, hier können wir aber keine Hilfe bereitstellen.
16 16  
17 17  Um die entsprechenden Abhängigkeiten zu {{formcycle case="dat"/}} bereitzustellen, ist das Repository unter der URL [[https:~~/~~/artifactory.xima-services.de/artifactory/fc-plugin-dev>>url:https://artifactory.xima-services.de/artifactory/fc-plugin-dev]] zu benutzen. Dieses enthält alle öffentlich zur Verfügung stehenden Artefakte, welche dem Plugin zur Laufzeit bereitgestellt und während der Entwicklung benötigt werden.
18 18  
... ... @@ -34,7 +34,7 @@
34 34   <enabled>false</enabled>
35 35   </snapshots>
36 36   <id>xima</id>
37 - <name>libs-release</name>
36 + <name>fc-plugin-dev</name>
38 38   <url>https://artifactory.xima-services.de/artifactory/fc-plugin-dev</url>
39 39   </repository>
40 40   </repositories>
... ... @@ -45,7 +45,7 @@
45 45   <enabled>false</enabled>
46 46   </snapshots>
47 47   <id>xima</id>
48 - <name>plugins-release</name>
47 + <name>fc-plugin-dev</name>
49 49   <url>https://artifactory.xima-services.de/artifactory/fc-plugin-dev</url>
50 50   </pluginRepository>
51 51   </pluginRepositories>
... ... @@ -66,18 +66,20 @@
66 66  {{/code}}
67 67  {{/panel}}
68 68  
69 -== Maven-Projekteinrichtung
68 +== Maven-Projekteinrichtung ==
70 70  
71 71  Im Folgenden werden einige Punkte beschrieben, die beim Einrichten eines Maven-Projekts für ein {{formcycle/}}-Plugin beachtet werden müssen. Für den schnellen Einstieg gibt auch einige [[Maven-Archetypes>>||anchor="HMaven-Archetypes"]].
72 72  
73 -=== Artekfakte und Abhängigkeiten
72 +=== Artekfakte und Abhängigkeiten ===
74 74  
75 75  {{info}}
76 76  Alle Abhängigkeiten zu {{formcycle case="dat"/}} sind im scope "provided" zu definieren!
77 77  {{/info}}
78 78  
79 -Ausgangspunkt für die Entwicklung von Plugin ist das Maven-Artefakt //fc-plugin-common//. Dieses enthält die einzelnen Plugin-Schnittstellen und steht auch auf [[unserere Downloadseite zur Verfügung>>url:http://artifactory.xima-services.de/artifactory/fc-plugin-dev/de/xima/fc/fc-plugin-common||target="_blank"]].
78 +Eine fertige einfache //pom.xml// nnen Sie [[hier herunterladen>>attach:pom.xml||rel="__blank"]].
80 80  
80 +Ausgangspunkt für die Entwicklung von Plugin ist das Maven-Artefakt //fc-plugin-common//. Dieses enthält die einzelnen Plugin-Schnittstellen und steht auch auf [[unsererer Downloadseite zur Verfügung>>url:http://artifactory.xima-services.de/artifactory/fc-plugin-dev/de/xima/fc/fc-plugin-common||rel="noopener noreferrer" target="_blank"]].
81 +
81 81  In der //pom.xml// des Plugin-Projekts kann diese Abhängigkeit wie folgt eingebunden werden:
82 82  
83 83  {{code language="xml"}}
... ... @@ -95,7 +95,7 @@
95 95   </dependencies>
96 96  {{/code}}
97 97  
98 -Ferner steht je nach Tiefe der Integration in die bestehende Umgebung von {{formcycle case="dat"/}} und dessen Benutzung als höchste Implementierung das Artefakt //fc-logic// zur Verfügung. Dieses wird wie folgt als weitere (oder einzige) Abhängigkeit definiert:
99 +Ferner steht je nach Tiefe der Integration in die bestehende Umgebung von {{formcycle case="dat"/}} und deren Benutzung als höchste Implementierung das Artefakt //fc-logic// zur Verfügung. Dieses wird wie folgt als weitere (oder einzige) Abhängigkeit definiert:
99 99  
100 100  {{code language="xml"}}
101 101   <dependency>
... ... @@ -106,22 +106,39 @@
106 106   </dependency>
107 107  {{/code}}
108 108  
109 -Eine entsprechende Benutzung ist vor allem bei der Verwendung der Datenbankschnittstelle sowie bei der Implementierung von eigenen Verarbeitungen nötig. Eine Vorlage für ein somit entstehendes Project Object Model finden Sie [[hier>>attach:pom.xml||rel="__blank"]].
110 +Eine entsprechende Benutzung ist vor allem bei der Verwendung der Datenbankschnittstelle sowie bei der Implementierung von eigenen Verarbeitungen nötig.
110 110  
111 -Ferner ist zu beachten, dass sämtliche Abhängigkeiten zu {{formcycle case="dat"/}} im scope //provided //anzugeben sind. Dies verhindert neben Classpath-Problemen auch das unnötige Anschwellen der Plugin-Größe. Ebenso sollten diesbezüglich Abhängigkeiten auf bereits von {{formcycle case="dat"/}} benutzten und damit bereitstehenden Bibliotheken wiederverwendet werden (z.B. diverse Apache Commons-Implementierungen).
112 +Ferner ist zu beachten, dass sämtliche Abhängigkeiten zu {{formcycle case="dat"/}} im scope //provided //anzugeben sind. Dies verhindert neben Classpath-Problemen auch das unnötige Anschwellen der Plugin-Größe. Ebenso sollten diesbezüglich Abhängigkeiten auf bereits von {{formcycle case="dat"/}} benutzten und damit bereitstehenden Bibliotheken wiederverwendet werden (z.B. diverse Apache Commons-Implementierungen). Solche Abhängigkeit sind auch im Scope //provided// zu definieren. Eine einfache Möglichkeit, Fehler zu vermeiden, ist das Importieren der FORMCYCLE-Bom:
112 112  
113 -=== Manifest und Fat JAR
114 +{{code language="xml"}}
115 + <dependencyManagement>
116 + <dependencies>
117 + <!--Import dependency versions from FORMCYCLE -->
118 + <dependency>
119 + <groupId>de.xima.fc</groupId>
120 + <artifactId>fc</artifactId>
121 + <version>${xfc.version}</version>
122 + <type>pom</type>
123 + <scope>import</scope>
124 + </dependency>
125 + </dependencies>
126 + </dependencyManagement>
127 +{{/code}}
114 114  
129 +Dann einfach die gewünschte Abhängigkeit ohne {{code}}<version>...</version>{{/code}} definieren. Wenn FORMCYCLE die Abhängigkeit schon enthält, gibt es keinen Build-Fehler. Andernfalls muss diese im Plugin mitgeliefert werden. In dem Fall die Version hinzufügen und den Provided-Scope entfernen.
130 +
131 +=== Manifest und Fat JAR ===
132 +
115 115  In der //META-INF/MANIFEST.MF// in der Plugin-JAR-Datei sollten folgende Informationen stehen:
116 116  
117 117  ; formcycle-version-requirement
118 -: Erforderlich. Version von {{formcycle/}}, für die das Plugin gedacht ist.Ist erforderlich, damit {{formcycle/}} bei der Installation die Kompatibilität prüfen kann.
136 +: Erforderlich. Version von {{formcycle/}}, für die das Plugin gedacht ist. Ist erforderlich, damit {{formcycle/}} bei der Installation die Kompatibilität prüfen kann.
119 119  ; Implementation-Version
120 -: Erforderlich. Version des Plugins, wird etwa in der Oberfläche angezeigt.
138 +: Erforderlich. Version des Plugins; Diese wird z.B. in der Oberfläche angezeigt.
121 121  ; Build-Time oder Build-Timestamp
122 -: Optional, wird bei SNAPSHOT-Versionen mit angezeigt, um den SNAPSHOT zu identifizieren.
140 +: Optional. Wird bei SNAPSHOT-Versionen mit angezeigt, um den SNAPSHOT zu identifizieren.
123 123  ; Implementation-Title
124 -: Optional, wird standardmäßig etwa vom Deploy-Plugin verwendet, um das Plugin zu identifzieren.
142 +: Optional. Wird standardmäßig etwa vom Deploy-Plugin verwendet, um das Plugin zu identifzieren.
125 125  
126 126  Diese Informationen können wie unten beschrieben mittels des //maven-assembly-plugin// in die Manifest-Datei geschrieben werden.
127 127  
... ... @@ -137,7 +137,7 @@
137 137   <maven-assembly-plugin.version>3.3.0</maven-assembly-plugin.version>
138 138   </properties>
139 139   <build>
140 - <finalName>${project.parent.artifactId}</finalName>
158 + <finalName>${project.artifactId}</finalName>
141 141   <plugins>
142 142   <plugin>
143 143   <groupId>org.apache.maven.plugins</groupId>
... ... @@ -151,7 +151,7 @@
151 151   <goal>single</goal>
152 152   </goals>
153 153   <configuration>
154 - <finalName>${project.parent.artifactId}</finalName>
172 + <finalName>${project.artifactId}</finalName>
155 155   <appendAssemblyId>false</appendAssemblyId>
156 156   <descriptorRefs>
157 157   <descriptorRef>jar-with-dependencies</descriptorRef>
... ... @@ -201,7 +201,7 @@
201 201   Auswahl eines Archetypes beim Erstellen eines Maven-Projekts in Eclipse
202 202  {{/figure}}
203 203  
204 -Für einige häufig verwendete Plugin-Typen stehen [[Maven-Archetypes>>url:https://maven.apache.org/guides/introduction/introduction-to-archetypes.html||target="_blank"]] bereits, um schnell ein Maven-Projekt aufsetzen zu können.
222 +Für einige häufig verwendete Plugin-Typen stehen [[Maven-Archetypes>>url:https://maven.apache.org/guides/introduction/introduction-to-archetypes.html||rel="noopener noreferrer" target="_blank"]] bereits, um schnell ein Maven-Projekt aufsetzen zu können.
205 205  
206 206  Voraussetzung für die Verwendung ist, dass in den //~~/.m2/settings.xml// wie oben beschrieben das XIMA-Artifactory eingerichtet wurde. Dann kann etwa über die Kommandozeile wie folgt eine Archetype generiert werden:
207 207  
... ... @@ -211,18 +211,77 @@
211 211  
212 212  Es werden dann einige wenige Informationen wie die gewünschten Maven-Koordinaten des neuen Plugin-Projekts abgefragt und anschließend ein neues vorkonfiguriertes Projekt erstellt.
213 213  
214 -Alle vorhandenen Archetypes und deren Versionen können im [[Archetype-Katalog>>url:https://artifactory.xima-services.de/artifactory/libs-release-local/archetype-catalog.xml||target="_blank"]] eingesehen werden.
232 +Alle vorhandenen Archetypes und deren Versionen können im [[Archetype-Katalog>>url:https://artifactory.xima-services.de/artifactory/libs-release-local/archetype-catalog.xml||rel="noopener noreferrer" target="_blank"]] eingesehen werden.
215 215  
216 216  In Eclipse kann der Archetype-Katalog in den Einstellungen hinzugefügt werden. Bei der Erstellung eines neuen Maven-Projekt werden dann alle verfügbaren Archetypes angezeigt:
217 217  
218 -{{code language="plaintext"}}https://artifactory.xima-services.de/artifactory/libs-release-local/archetype-catalog.xml{{/code}}
236 +{{code language="plaintext"}}
237 +https://artifactory.xima-services.de/artifactory/libs-release-local/archetype-catalog.xml
238 +{{/code}}
219 219  
220 -== Deploy-Plugin
240 +== Deploy-Plugin ==
221 221  
222 -TODO
242 +Um beim Entwickeln nicht jedes Mal eine neue Plugin-Version manuell über die Oberfläche hochladen zu müssen, kann das Deploy-Plugin verwendet werden. Dieses besteht aus 2 Teilen:
223 223  
224 -== FC-Server-Plugin
244 +* Ein Maven-Plugin, welches nach dem Bauen das Plugin via HTTP an einen laufenden {{formcycle/}}-Server sendet
245 +* Ein Plugin für {{formcycle/}}, welche die Gegenstelle in {{formcycle/}} bereitstellt und das Plugin aus dem HTTP-Request in {{formcycle/}} installiert.
225 225  
226 -TODO
247 +Weitere Details können im [[Hilfe-Artikel zum Deploy-Plugin>>doc:Formcycle.PluginDocumentation.FormcycleDeployPluginPlugin]] nachgelesen werden. Für die meisten Fälle reicht folgende Konfiguration in der //pom.xml// des Plugin-Projekts aus:
227 227  
249 +{{code language="xml"}}
250 + <properties>
251 + <fc-deploy-plugin-maven-plugin.version>7.0.1<fc-deploy-plugin-maven-plugin.version></fc-deploy-plugin-maven-plugin>
252 + <build>
253 + <plugins>
254 + <plugin>
255 + <groupId>de.xima.fc.maven.plugin</groupId>
256 + <artifactId>fc-deploy-plugin-maven-plugin</artifactId>
257 + <version>${fc-deploy-plugin-maven-plugin.version}</version>
258 + <executions>
259 + <execution>
260 + <id>upload</id>
261 + <phase>package</phase>
262 + <goals>
263 + <goal>deploy</goal>
264 + </goals>
265 + </execution>
266 + </executions>
267 + </plugin>
268 + </plugins>
269 + </build>
270 +{{/code}}
228 228  
272 +Sofern das Deploy-Plugin bereits in {{formcycle/}} installiert ist, kann das Plugin-Projekt dann beim Bauen wie folgt hochgeladen werden:
273 +
274 +{{code language="bash"}}
275 +mvn package fc-deploy:deploy -DfcDeployUrl=http://localhost:8080/xima-formcycle -DfcDeployToken=admin
276 +{{/code}}
277 +
278 +Wird Eclipse benutzt, kann auch eine Launch-Configuration mit den //fcDeployUrl// und dem //fcDeployToken// angelegt werden. Das Plugin wird dann unter den System-Plugins registriert.
279 +Soll das Plugin im Bereich eines bestimmten Mandanten registriert werden, so kann dies über den zusätzlichen Launch-Configuration Parameter //fcDeployClientId //erreicht werden. Dieser Parameter muss als Wert die Id des Mandanten enthalten.
280 +
281 +== FC-Server-Plugin ==
282 +
283 +Zum Testen eines Plugins ist es erforderlich, einen laufenden {{formcycle/}}-Server zu haben. Zur Vereinfachung der Entwicklung gibt es das //fc-server-maven-plugin//, welches mittels eines einzigen Befehls ein fertig eingerichtetes {{formcycle/}} lokal startet, wo auch bereits das Deploy-Plugin vorinstalliert ist.
284 +
285 +Sofern wie oben beschrieben in //~~/.m2/settings.xml// die //pluginGroup// hinterlegt wurde, kann in einem beliebiegen Verzeichnis wie folgt ein {{formcycle/}}-Server per Maven gestartet werden:
286 +
287 +{{code language="bash"}}
288 +# Aktuelle Version starten
289 +mvn package fc-server:run-ms-war
290 +
291 +# Spezifische Version starten
292 +mvn de.xima.fc.maven.plugin:fc-server-maven-plugin:7.0.4:run-ms-war -DxfcVersion=7.0.16
293 +{{/code}}
294 +
295 +{{info}}
296 +Wir empfehlen die Nutzung von Java 11. Bei Nutzung von Java 17 kann es aktuell zu Problemen beim Starten von {{formcycle/}} kommen.
297 +{{/info}}
298 +
299 +{{info}}
300 +Die Major- und Minor-Version des Maven-Plugins sollte immer der Major- und Minor-Version des zu startenden {{formcycle case="gen"/}} entsprechen. Für {{formcycle/}} 7.0.x sollte also das Maven-Plugin in Version 7.0.x verwendet werde, für {{formcycle/}} 7.1.x das Maven-Plugin in Version 7.1.x usw.
301 +{{/info}}
302 +
303 +Nach kurzer Wartezeit (beim ersten Mal kann es länger dauern) ist dann ein {{formcycle/}}-Server gestartet. Die URL steht am Ende in der Kommandozeile, standardmäßig http://localhost:8080/xima-formcycle Der Zugang für den Superadmin ist {{code language="plaintext"}}sadmin{{/code}} (Passwort {{code language="plaintext"}}admin{{/code}}), der Zugang für den Mandantadministrator {{code language="plaintext"}}admin{{/code}} (Passwort {{code language="plaintext"}}/admin_{{/code}}).
304 +
305 +Dies funktioniert auch in einem Ordner ohne Maven-Projekt. Falls keine {{formcycle/}} angegeben ist, wird eine Standard-Version genommen. Wird der Befehl innerhalb eines Plugin-Maven-Projekts ausgeführt, wird versucht, die Version von {{formcycle/}} aus dem Plugin-Projekt auszulesen.
pom.xml
Author
... ... @@ -1,1 +1,1 @@
1 -XWiki.rth
1 +XWiki.awa
Größe
... ... @@ -1,1 +1,1 @@
1 -2.2 KB
1 +5.7 KB
Inhalt
... ... @@ -2,55 +2,89 @@
2 2   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
3 3   <modelVersion>4.0.0</modelVersion>
4 4  
5 + <!-- MUST BE FILLED IN -->
5 5   <groupId></groupId>
6 6   <artifactId></artifactId>
7 7   <version></version>
8 - <packaging>jar</packaging>
9 -
10 10   <name></name>
11 11  
11 + <packaging>jar</packaging>
12 +
12 12   <properties>
13 13   <!-- Configuration -->
14 14   <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
15 15  
16 16   <!-- Dependencies -->
17 - <xfc-version>7.0.9</xfc-version>
18 + <xfc.version>7.0.10</xfc.version>
19 + <junit-jupiter.version>5.6.0</junit-jupiter.version>
18 18  
19 19   <!-- Plugins -->
20 - <maven-compiler-plugin-version>3.8.1</maven-compiler-plugin-version>
21 - <maven-jar-plugin-version>3.1.0</maven-jar-plugin-version>
22 + <maven-surefire-plugin.version>2.22.2</maven-surefire-plugin.version>
23 + <maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version>
24 + <maven-jar-plugin.version>3.1.0</maven-jar-plugin.version>
25 + <maven-assembly-plugin.version>3.3.0</maven-assembly-plugin.version>
26 + <fc-deploy-plugin-maven-plugin.version>7.0.1</fc-deploy-plugin-maven-plugin.version>
27 + <fc-server-maven-plugin.version>7.0.1</fc-server-maven-plugin.version>
22 22   </properties>
23 23  
24 - <repositories>
25 - <repository>
26 - <id>xima</id>
27 - <name>fc-plugin-dev</name>
28 - <url>http://artifactory.xima-services.de/artifactory/fc-plugin-dev</url>
29 - </repository>
30 - </repositories>
31 -
32 32   <dependencies>
31 + <!-- Reference FORMCYCLE libraries. The plugin is installed in a running -->
32 + <!-- FORMCYCLE system, , so you do not need to include the FORMCYCLE libraries -->
33 + <!-- in the plugin JAR. This is done by setting the scope to "provided" -->
33 33   <dependency>
34 34   <groupId>de.xima.fc</groupId>
35 - <artifactId>fc-plugin-common</artifactId>
36 - <version>${xfc-version}</version>
36 + <artifactId>fc-logic</artifactId>
37 + <version>${xfc.version}</version>
37 37   <scope>provided</scope>
38 38   </dependency>
39 39  
41 + <!-- JUnit for writing unit tests -->
40 40   <dependency>
41 - <groupId>de.xima.fc</groupId>
42 - <artifactId>fc-logic</artifactId>
43 - <version>${xfc-version}</version>
44 - <scope>provided</scope>
43 + <groupId>org.junit.jupiter</groupId>
44 + <artifactId>junit-jupiter</artifactId>
45 + <version>${junit-jupiter.version}</version>
46 + <scope>test</scope>
45 45   </dependency>
48 +
49 + <!-- You can add additional dependencies here. -->
50 + <!-- Some common libraries as apache-commons and guava are provided by -->
51 + <!-- FORMCYCLE and can be set to scope=provided. -->
52 +
46 46   </dependencies>
47 47  
48 48   <build>
56 + <finalName>${project.artifactId}</finalName>
57 +
49 49   <plugins>
59 +
60 + <!-- Upload the plugin to a running FORMCYCLE server as part of the Maven build process -->
61 + <!-- mvn package fc-deploy:deploy -DfcDeployUrl=http://localhost:8080/xima-formcycle -DfcDeployToken=admin -->
50 50   <plugin>
63 + <groupId>de.xima.fc.maven.plugin</groupId>
64 + <artifactId>fc-deploy-plugin-maven-plugin</artifactId>
65 + <version>${fc-deploy-plugin-maven-plugin.version}</version>
66 + </plugin>
67 +
68 + <!-- Start a preconfigured FORMCYCLE server-->
69 + <!-- mvn fc-server:run-ms-war -->
70 + <plugin>
71 + <groupId>de.xima.fc.maven.plugin</groupId>
72 + <artifactId>fc-server-maven-plugin</artifactId>
73 + <version>${fc-server-maven-plugin.version}</version>
74 + <configuration>
75 + <bootstrap>
76 + <pluginManagement>
77 + <deployMavenProject>true</deployMavenProject>
78 + </pluginManagement>
79 + </bootstrap>
80 + </configuration>
81 + </plugin>
82 +
83 + <!-- Configure the compilation process. At least Java 11 is required. -->
84 + <plugin>
51 51   <groupId>org.apache.maven.plugins</groupId>
52 52   <artifactId>maven-compiler-plugin</artifactId>
53 - <version>${maven-compiler-plugin-version}</version>
87 + <version>${maven-compiler-plugin.version}</version>
54 54   <configuration>
55 55   <release>11</release>
56 56   <encoding>UTF-8</encoding>
... ... @@ -59,10 +59,11 @@
59 59   </configuration>
60 60   </plugin>
61 61  
96 + <!-- Configure how the JAR is created, including manifest entries -->
62 62   <plugin>
63 63   <groupId>org.apache.maven.plugins</groupId>
64 64   <artifactId>maven-jar-plugin</artifactId>
65 - <version>${maven-jar-plugin-version}</version>
100 + <version>${maven-jar-plugin.version}</version>
66 66   <configuration>
67 67   <archive>
68 68   <manifest>
... ... @@ -69,11 +69,58 @@
69 69   <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
70 70   </manifest>
71 71   <manifestEntries>
72 - <formcycle-version-requirement>${xfc-version}</formcycle-version-requirement>
107 + <formcycle-version-requirement>${xfc.version}</formcycle-version-requirement>
108 + <Build-Timestamp>${maven.build.timestamp}</Build-Timestamp>
109 + <Implementation-Title>${project.groupId}:${project.artifactId}</Implementation-Title>
110 + <Implementation-Vendor-Id>${project.groupId}</Implementation-Vendor-Id>
111 + <Implementation-Version>${project.version}</Implementation-Version>
73 73   </manifestEntries>
74 74   </archive>
75 75   </configuration>
76 76   </plugin>
116 +
117 + <!-- Build a fat JAR with all dependencies included -->
118 + <plugin>
119 + <groupId>org.apache.maven.plugins</groupId>
120 + <artifactId>maven-assembly-plugin</artifactId>
121 + <version>${maven-assembly-plugin.version}</version>
122 + <executions>
123 + <execution>
124 + <id>fat-jar</id>
125 + <phase>package</phase>
126 + <goals>
127 + <goal>single</goal>
128 + </goals>
129 + <configuration>
130 + <finalName>${project.artifactId}</finalName>
131 + <appendAssemblyId>false</appendAssemblyId>
132 + <descriptorRefs>
133 + <descriptorRef>jar-with-dependencies</descriptorRef>
134 + </descriptorRefs>
135 + <archive>
136 + <manifest>
137 + <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
138 + </manifest>
139 + <manifestEntries>
140 + <formcycle-version-requirement>${xfc.version}</formcycle-version-requirement>
141 + <Build-Timestamp>${maven.build.timestamp}</Build-Timestamp>
142 + <Implementation-Title>${project.groupId}:${project.artifactId}</Implementation-Title>
143 + <Implementation-Vendor-Id>${project.groupId}</Implementation-Vendor-Id>
144 + <Implementation-Version>${project.version}</Implementation-Version>
145 + </manifestEntries>
146 + </archive>
147 + </configuration>
148 + </execution>
149 + </executions>
150 + </plugin>
151 +
152 + <!-- Use JUnit to run test classes -->
153 + <plugin>
154 + <groupId>org.apache.maven.plugins</groupId>
155 + <artifactId>maven-surefire-plugin</artifactId>
156 + <version>${maven-surefire-plugin.version}</version>
157 + </plugin>
77 77   </plugins>
78 78   </build>
79 79  </project>
161 +