Zeige letzte Bearbeiter
1 [[**Plugin-Download**>>url:https://customer.formcycle.eu/index.php/apps/files/?dir=/FORMCYCLE%20-%20Plugins%20Customer/fc-plugin-deploy-plugin&fileid=12657||target="_blank"]] (erfordert Anmeldung)
2
3 Hinweis zum Namen: Es ist ein Plugin zum Deployen von Plugins in {{formcycle/}}, daher //FORMCYCLE-Deploy-Plugin-Plugin//.
4
5 {{content/}}
6
7 Mit dem Deploy-Plugin können Plugins automatisch in die {{formcycle/}}-Anwendung hochgeladen und dort installiert werden. Dies hat gegenüber der manuellen Installation über das entsprechende [[Menü im Backend>>doc:Formcycle.UserInterface.Client.Plugins]] einige Vorteile:
8
9 * Plugin-Entwickler können beim Maven-Build das Plugin automatisch am Ende des Builds hochladen. So kann der Entwickler schneller testen.
10 * Eine Installation auf einem Live-System kann so weiter automatisiert werden.
11
12 Um Plugins einfach deployen zu können, empfiehlt sich der Quick Start über das Maven-Deploy-Plugin (siehe Kapitel 4. unten). Es folgt zunächst eine genaue Beschreibung des Plugins.
13
14 Das Deploy-Plugin kann sowohl als Mandant-Plugin als auch als System-Plugin installiert werden. Es enthält eine [[Servlet-Aktion>>doc:Formcycle.PluginDevelopment.Types.IPluginServletAction]]. Per HTTP-Post-Request wird eine Plugin-JAR-Datei an den {{formcycle/}}-Server gesendet. Die weiteren Parameter im HTTP-Request bestimmen, was nun weiter mit dem Plugin geschieht, etwa ob es nur installiert oder auch aktiviert werden soll.
15
16 Falls das hochgeladene Plugin bereits existiert, ist es in der Regel ist es sinnvoll, dieses zu ersetzen. Dazu ist es erforderlich, anzugeben, über welchen Identifikator ein Plugin identifiziert wird. Es gibt hierbei vier Möglichkeiten, die dieses Plugin erlaubt:
17
18 * (**empfohlen**) Das Plugin wird anhand eines Eintrags im Manifest identifiziert. Dieses muss in der Plugin-JAR-Datei im Pfad //META-INF/MANIFEST.MF// liegen. Beim Bau der JAR-Datei muss ein entsprechender eindeutiger Eintrag in das Manifest geschrieben werden, etwa die Group-ID und Artifact-ID. Diese Methode hat den Vorteil, dass der Identifikator sich nie ändern wird und unabhängig von internen IDs und Dateinamen ist.
19 * Das Plugin wird anhand seines Namens identifiziert, also dem Namen der ursprünglich hochgeladenen JAR-Datei. Dies ist der Name, wie er auch [[in der Oberfläche>>doc:Formcycle.UserInterface.Client.Plugins]] zu sehen ist.
20 * Das Plugin wird anhand seiner internen Datenbank-ID identifiziert. Diese ist aktuell nicht an der Oberfläche zu sehen. Diese Option sollte nur von Entwicklern genutzt werden.
21 * Das Plugin wird anhand seiner internen UUID identifiziert. Diese ist aktuell nicht an der Oberfläche zu sehen. Diese Option sollte nur von Entwicklern genutzt werden.
22
23 Standardmäßig ist eine Servlet-Aktion für alle frei zugänglich. Da es in der Regel unerwünscht ist, dass jeder (auch unangemeldete) Nutzer Plugins installieren kann, kann das Deploy-Plugin durch ein Passwort abgesichert werden. Dazu muss in der Plugin-Konfiguration der Passwort-Hash hinterlegt werden und das Passwort dann im HTTP-POST-Request mitgesendet werden.
24
25 == Plugin-Konfiguration ==
26
27 Am Plugin selber kann konfiguriert werden, ob das Deploy-Servlet durch ein Passwort geschützt werden soll. Dieses Passwort muss dann im Klartext beim HTTP-POST-Request mit angegeben werden.
28
29 Zur Konfiguration des Passworts gibt es die eine Plugin-Eigenschaft //token//, diese hat das folgende Format
30
31 {{code language="none"}}
32 hash_method:hashed_value
33 {{/code}}
34
35 Folgende Hash-Methoden stehen zur Verfügung:
36
37 ; plain
38 : Identitätsfunktion, das Passwort im Klartext angegeben.
39 ; sha256
40 : SHA-256-Algorithmus.
41 ; sha384
42 : SHA-384-Algorithmus.
43 ; sha512
44 : SHA-512-Algorithmus.
45
46 Um das Passwort im Klartext beispielsweise auf //admin// festzulegen, wird der folgende Wert für die Plugin-Eigenschaft //token// eingegeben:
47
48 {{code language="none"}}
49 plain:admin
50 {{/code}}
51
52 Um das Passwort mit SHA-256 beispielsweise auf //admin// festzulegen, wird der folgende Wert für die Plugin-Eigenschaft //token// eingegeben:
53
54 {{code language="none"}}
55 sha256:S+32GI3fWXwHHulUMtWmjpQ15EqMvgVYguuO9SKxfNw+ckAGQljP6tKlf1EITnU7
56 {{/code}}
57
58 Der Hash ist gesalzen. Ein gültiger Hash für ein bestimmtes Passwort kann mit dem //create-token//-Servlet erzeugt werden, siehe unten.
59
60
61 == Deploy-Servlet ==
62
63 Im Folgenden wird der Aufbau des HTTP-Requests beschrieben, um ein Plugin zu installieren, zu aktualisieren oder zu löschen.
64
65 Es muss immer ein HTTP-Post-Request verwendet werden und [[sich an folgende URL richten>>doc:Formcycle.PluginDevelopment.Types.IPluginServletAction]] (Namen des {{formcycle/}}-Servers entsprechend anpassen):
66
67 {{code language="none"}}
68 POST http://localhost:8080/formcycle/plugin?name=deploy-plugin&client-id=154 HTTP/1.1
69 {{/code}}
70
71 Die //client-id// muss nicht angegeben werden, wenn das Plugin als System-Plugin installiert ist.
72
73 === Request-Parameter ===
74
75 Die Parameter können direkt als URL-Parameter, als //multipart/form-data// oder als //application/x-www-form-urlencoded// übergeben werden. Folgende Parameter werden vom Deploy-Plugin unterstützt und können übergeben werden:
76
77 ; deploy-action
78 : Aktion, welche mit dem Plugin durchgeführt werden soll. Erlaubte Werte sind //save//, //update-properties//, //activate//, //deactivate// und //delete//.
79 :; save
80 :: Überträgt das angegebene Plugin auf das {{formcycle/}}-System. Es muss hierbei eine JAR-Datei übertragen werden. Falls das Plugin noch nicht existiert (und der Parameter //disallow-install// nicht gesetzt ist), wird das Plugin neu installiert und ist dann aktiviert. Andernfalls, falls das Plugin bereits existiert, wird es aktualisiert, dabei bleibt das Plugin aktiviert oder deaktiviert.
81 :; delete
82 :: Löscht das angegebene Plugin. Es darf hierbei keine JAR-Datei übertragen werden. Existiert das angegebene Plugin nicht, wird ein Fehler zurückgegeben.
83 :; activate
84 :: Aktiviert das angegebene Plugin. Es darf hierbei keine JAR-Datei übertragen werden. Existiert das angegebene Plugin nicht, wird ein Fehler zurückgegeben. Ist das Plugin bereits aktiviert, wird nicht getan und ein Erfolg zurückgegeben.
85 :; deactivate
86 :: Deaktiviert das angegebene Plugin. Es darf hierbei keine JAR-Datei übertragen werden. Existiert das angegebene Plugin nicht, wird ein Fehler zurückgegeben. Ist das Plugin bereits deaktiviert, wird nicht getan und ein Erfolg zurückgegeben.
87 :; update-properties
88 :: Aktualisiert die Eigenschaften des angegebenen Plugins. Es darf hierbei keine JAR-Datei übertragen werden. Entweder die Eigenschaft //clear-properties// oder //property// sollte gesetzt sein. Existiert das angegebene Plugin nicht, wird ein Fehler zurückgegeben.
89 ; client-id
90 : ID des Mandanten, in dem ein Plugin installiert, aktualisiert oder gelöscht werden soll. Es darf nur entweder //client-id// oder //client-uuid// angegeben werden
91 ; client-uuid
92 : UUID des Mandanten, in dem ein Plugin installiert, aktualisiert oder gelöscht werden soll. Es darf nur entweder //client-id// oder //client-uuid// angegeben werden. Es ist zu beachten, dass der Aufruf eines als Mandant-Plugin installierten Servlet-Aktion immer der Parameter //client-id// erforderlich ist.
93 ; jar-file
94 : Binärdaten mit der JAR-Datei des Plugins, welches aktualisert oder installiert werden soll.
95 ; token
96 : Das Token (Passwort) für die Authorisierung des Requests. Nur erforderlich, wenn in der Plugin-Konfiguration ein Token festgelegt wurde.
97 ; plugin-ident
98 : Die Art, wie nach einem vorhandenen Plugin gesucht wird (siehe oben). Folgende Werte sind erlaubt:
99 :; manifest
100 :: Identifiziert ein Plugin anhand eines Eintrags im Manifest.
101 :; id
102 :: Identifiziert ein Plugin anhand seiner Datenbank-ID.
103 :; name
104 :: Identifiziert ein Plugin anhand seines Namens (Dateiname der JAR-Datei)
105 :; uuid
106 :: Identifiziert ein Plugin anhand seiner UUID.
107 ; plugin-identifier
108 : Identifikator des Plugins, welches aktualisiert oder gelöscht werden soll. Die konkrete Bedeutung dieses Parameters ist abhängig von dem Wert von //plugin-ident//:
109 :; plugin-ident=manifest
110 :: //plugin-identifier// muss den Namen der Manifest-Eigenschaft und dessen Wert enthalten, im Format //ATTRIBUTE_NAME=VALUE//. Wird zum Beispiel //Implementation-Title=com.example.fc.plugin:my-plugin// übergeben wird, wird nach einem existierenden Plugin gesucht, welches im Manifest in der Eigenschaft //Implementation-Title// den Wert //com.example.fc.plugin:my-plugin// stehen hat.
111 :; plugin-ident=id
112 :: //plugin-identifier// muss die gewünschte ID des Plugins enthalten, etwa //53// oder /893//.//
113 :; plugin-ident=name
114 :: //plugin-identifier// muss den gewünschten Names des Plugins enthalten, etwa //my-plugin.jar// oder //foobar.jar//.
115 :; plugin-ident=uuid
116 :: //plugin-identifier// muss die gewünschte UUID des Plugins enthalten, etwa //03022599-903d-429b-9822-80a324a542fc//.
117 ; clear-properties
118 : Entweder //true// oder //false//. Wenn //true//, werden alle Plugin-Eigenschaften entfernt beziehungsweise deren Werte geleert. Dies wird ausgeführt, bevor die neu zu setzenden Plugin-Eigenschaften (Parameter //property//) angewendet werden.
119 ; property
120 : Name und Wert einer Plugin-Eigenschaft, die an der Plugin-Konfiguration gesetzt werden soll, im Format //key=value//. Dieser HTTP-Parameter kann mehrfach angegeben werden, um mehrere Plugin-Eigenschafte zu setzen. Wird etwa //database.username=max// übergeben, wird die Plugin-Eigenschaft //database.username// auf //max// gesetzt.
121 ; disallow-install
122 : Entweder //true// oder //false//. Ist diese Option auf //true// gesetzt und existiert das Plugin noch nicht (bezüglich der angegebenen //plugin-ident// und //plugin-identifier//), wird das Plugin nicht neu installiert und eine Fehlermeldung zurückgegeben. Andernfalls wird das Plugin installiert, falls noch nicht vorhanden, oder aktualisiert, falls vorhanden.
123 ; locale
124 : Die Sprache, welche während der Installation, Aktualisierung oder Löschung des Plugins verwendet werden soll, etwa //en// oder //de//. Beeinflusst nur einige Fehlermeldungen und kann in der Regel weggelassen werden.
125
126 === Beispiele ===
127
128 ;
129
130 (((
131 {{code language="bash"}}
132 # Installiert oder aktualisiert das Plugin mit dem Implementation-Title com.example:plugin
133 curl -X POST \
134 -F deploy-action=save \
135 -F token=admin \
136 -F plugin-ident=manifest \
137 -F plugin-identifier=Implementation-Title=com.example:plugin \
138 -F "jar-file=@my-plugin.jar" \
139 "http://localhost:8080/formcycle/plugin?client-id=154&name=deploy-plugin"
140 {{/code}}
141 )))
142
143 (((
144 {{code language="bash"}}
145 # Löscht das Plugin mit dem Implementation-Title com.example:plugin
146 curl -X POST \
147 -F deploy-action=delete \
148 -F token=admin \
149 -F plugin-ident=manifest \
150 -F plugin-identifier=Implementation-Title=com.example:plugin \
151 "http://localhost:8080/formcycle/plugin?client-id=154&name=deploy-plugin"
152 {{/code}}
153 )))
154
155 (((
156 {{code language="bash"}}
157 # Aktiviert das Plugin mit dem Implementation-Title com.example:plugin
158 curl -X POST \
159 -F deploy-action=activate \
160 -F token=admin \
161 -F plugin-ident=manifest \
162 -F plugin-identifier=Implementation-Title=com.example:plugin \
163 "http://localhost:8080/formcycle/plugin?client-id=154&name=deploy-plugin"
164 {{/code}}
165 )))
166
167 (((
168 {{code language="bash"}}
169 # Deaktiviert oder aktualisiert das Plugin mit dem Implementation-Title com.example:plugin
170 curl -X POST \
171 -F deploy-action=deactivate \
172 -F token=admin \
173 -F plugin-ident=manifest \
174 -F plugin-identifier=Implementation-Title=com.example:plugin \
175 "http://localhost:8080/formcycle/plugin?client-id=154&name=deploy-plugin"
176 {{/code}}
177 )))
178
179 (((
180 {{code language="bash"}}
181 # Löscht alle vorhandenen Plugin-Eigenschaften und setzt dann die Eigenschaft "foo" auf den Wert "bar"
182 curl -X POST \
183 -F deploy-action=update-properties \
184 -F token=admin \
185 -F plugin-ident=manifest \
186 -F plugin-identifier=Implementation-Title=com.example:plugin \
187 -F clear-properties=false \
188 -F property=foo=bar \
189 "http://localhost:8080/formcycle/plugin?client-id=154&name=deploy-plugin"
190 {{/code}}
191 )))
192
193 === Response ===
194
195 Das Deploy-Plugin liefert einen Statuscode und ein JSON-Objekt mit den Details zurück. Der Status-Code ist 2xx, falls das Deploy-Plugin erfolgreich ausgeführt wurde.
196
197 Das JSON-Objekt hat dabei [[die folgende Struktur>>https://json-schema.org/]]:
198
199 {{code language="json"}}
200 {
201 "$schema": "http://json-schema.org/schema",
202 "description": "Represents the response of the deploy plugin servlet.",
203 "required": [
204 "success",
205 "statusCode",
206 "details",
207 "message",
208 "requestParameters"
209 ],
210 "properties": {
211 "success": {
212 "type": "boolean",
213 "title": "Success status",
214 "description": "true if the deploy plugin servlet was executed successfully, or false otherwise"
215 },
216 "statusCode": {
217 "type": "number",
218 "title": "HTTP status code",
219 "description": "The status code of the HTTP request that contains this response."
220 },
221 "details": {
222 "type": "object",
223 "title": "Result details",
224 "description": "Detailed information about the plugin processed by the deploy plugin servlet.",
225 "oneOf": [
226 {
227 "description": "If the deploy plugin servlet was successful, details about the successfully executed action.",
228 "required": [
229 "id",
230 "uuid",
231 "name",
232 "active",
233 "message"
234 ],
235 "properties": {
236 "id": {
237 "type": "number",
238 "title": "Plugin ID",
239 "description": "The database ID of the processed plugin."
240 },
241 "uuid": {
242 "type": "string",
243 "title": "Plugin UUID",
244 "description": "The UUID of the processed plugin."
245 },
246 "name": {
247 "type": "string",
248 "title": "Plugin name",
249 "description": "The name of the processed plugin, i.e. the file name of the plugin JAR file."
250 },
251 "active": {
252 "type": "boolean",
253 "title": "Plugin activation status",
254 "description": "true if the plugin is now active, false if it is now inactive."
255 },
256 "message": {
257 "type": "string",
258 "title": "Result message",
259 "description": "Human-readable message describing the performed action."
260 }
261 }
262 },
263 {
264 "required": [
265 "exceptionType",
266 "exceptionMessage"
267 ],
268 "description": "If the deploy plugin servlet was unsuccessful, details about the error that occurred.",
269 "properties": {
270 "exceptionType": {
271 "type": "string",
272 "title": "Exception type",
273 "description": "The type of the error that occurred, a fully-classified name of the Java exception class."
274 },
275 "exceptionMessage": {
276 "type": "string",
277 "title": "Exception message",
278 "description": "The human-readable message of the error that occurred."
279 }
280 }
281 }
282 ]
283 },
284 "message": {
285 "type": "string",
286 "title": "Result message",
287 "description": "A human-readable message that describes this result."
288 },
289 "requestParameters": {
290 "type": "object",
291 "title": "Request parameters",
292 "description": "The parameters of the request that triggered this response."
293 }
294 }
295 }
296 {{/code}}
297
298 Beispiel für die Antwort beim Aktualisieren eines Plugins:
299
300 {{code language="json"}}
301 {
302 "success": true,
303 "requestParameters": {
304 "plugin-ident": ["manifest"],
305 "name": ["deploy-plugin"],
306 "client-id": ["1"],
307 "deploy-action": ["save"],
308 "plugin-identifier": ["Implementation-Title=com.example:plugin"],
309 "token": ["admin"]
310 },
311 "details": {
312 "name": "my-plugin.jar",
313 "active": true,
314 "id": 203,
315 "message": "Plugin saved successfully.",
316 "uuid": "2fe3e1ba-cb32-434e-9f59-4422f8dabcad"
317 },
318 "message": "Plugin saved successfully.",
319 "statusCode": 200
320 }
321 {{/code}}
322
323 Beispiel für die Antwort beim Löschen, falls das angegebene Plugin nicht gefunden wurde:
324
325 {{code language="json"}}
326 {
327 "success": false,
328 "requestParameters": {
329 "plugin-ident": ["manifest"],
330 "name": ["deploy-plugin"],
331 "client-id": ["1"],
332 "deploy-action": ["delete"],
333 "plugin-identifier": ["Implementation-Title=com.example:plugin"],
334 "token": ["admin"]
335 },
336 "details": {
337 "exceptionType": "java.lang.IllegalArgumentException",
338 "exceptionMessage": "Deploy action 'delete' requires an existing pluign, but none was found."
339 },
340 "message": "class java.lang.IllegalArgumentException: Deploy action 'delete' requires an existing pluign, but none was found.",
341 "statusCode": 404
342 }
343 {{/code}}
344
345
346 == Create-Token-Servlet ==
347
348 Mit diesem Servlet kann ein Hash für ein bestimmtes Klartextpasswort erzeugt werden, welcher dann in der Plugin-Eigenschaft //token// hinterlegt werden kann. Dies ist wichtig, wenn das Deployen von jedem Beliebigem Nutzer verhindert werden soll. Es muss hierbei ein HTTP-GET-Request verwendet werden (Pfad auf den {{formcycle/}}-Servet und die Mandant-ID entsprechend ersetzen):
349
350 {{code language="none"}}
351 http://localhost:8080/formcycle/plugin?client-id=1&name=create-token&token=<PASSWORT>&method=<METHOD>
352 {{/code}}
353
354 ; token
355 : Der Klartext des Passwort, zu dem ein Hash ermittelt werden soll.
356 ; method
357 : Methode zum Berechnen des Hashes. Erlaubte Werte sind //plain//, //sha256//, //sha384// und //sha512//. Optional, Standardwert ist //sha256//.
358
359 Als Antwort wird ein JSON zurückgeliefert, welches das gleiche Format wie die Antwort des Deploy-Plugins hat. Beispiel für eine Antwort:
360
361 {{code language="json"}}
362 {
363 "success": true,
364 "requestParameters": {
365 "name": ["create-token"],
366 "client-id": ["1"],
367 "token": ["admin"]
368 },
369 "details": {
370 "method": "sha256",
371 "token": "sha256:S+32GI3fWXwHHulUMtWmjpQ15EqMvgVYguuO9SKxfNw+ckAGQljP6tKlf1EITnU7"
372 },
373 "message": "Hash token created successfully",
374 "statusCode": 200
375 }
376 {{/code}}
377
378 == Maven-Deploy-Plugin ==
379
380 Um ein Plugin nach dem Bauen über Maven in {{formcycle/}} hochzuladen, gibt es auch ein Maven-Plugin, welches das Deploy-Servlet anspricht. Dieses ist über die Artifactory von XIMA erhältlich, falls man die entsprechenden Rechte hierfür hat:
381
382 === Konfiguration ===
383
384 {{code language="xml"}}
385 <plugin>
386 <groupId>de.xima.fc.maven.plugin</groupId>
387 <artifactId>fc-deploy-plugin-maven-plugin</artifactId>
388 <version>1.1.0</version>
389 <configuration>
390 <url>http://localhost:8080/formcycle</url>
391 <pluginName>deploy-plugin</pluginName>
392 <clientId>52</clientId>
393 <token>admin</token>
394 <deployAction>save</deployAction>
395 <pluginIdent>name</manifest>
396 <pluginIdentifier>my-plugin.jar</pluginIdentifier>
397 <jarFile></jarFile>
398 <disallowInstall>false</disallowInstall>
399 <locale>en</locale>
400 <clearProperties>true</clearProperties>
401 <properties>
402 <property1>value1</property1>
403 <property2>value2</property2>
404 <properties>
405 </configuration>
406 </plugin>
407 {{/code}}
408
409 Das Plugin hat die folgenden Optionen zur Konfiguration:
410
411 ; url [Standardwert: //${fcDeployUrl}//]
412 : URL mit Kontextpfad zum FORMCYCLE-Server, etwa //{{{http://localhost:8080/formcycle}}}//
413 ; pluginName [Standardwert: //deploy-plugin//]
414 : Der Name des Deploy-Plugins für den URL-Parameter //name//. In der Regel muss diese Option nicht gesetzt werden, der Standardwert ist ausreichend.
415 ; clientId [Standardwert: //${fcDeployClientId}//]
416 : ID des Mandanten, für den das Plugin installiert, aktualisiert oder gelöscht werden soll. Entspricht dem Parameter //client-id// des Deploy-Plugins, siehe oben.
417 ; clientUuid
418 : Alternative zu //clientID//. UUID des Mandanten, für den das Plugin installiert, aktualisiert oder gelöscht werden soll. Entspricht dem Parameter //client-uuid// des Deploy-Plugins, siehe oben.
419 ; token [Standardwert: //${fcDeployToken}//]
420 : Passwort für das Servlet-Plugin, falls in der Konfiguration des Deploy-Plugins ein Passwort gesetzt wurde.
421 ; deployAction [Standardwert: //save//]
422 : Aktion, welche mit dem Plugin durchgeführt werden soll. Erlaubte Werte sind //save//, //update-properties//, //activate//, //deactivate// und //delete//. Entspricht dem Parameter //deploy-action// des Deploy-Plugins, siehe oben.
423 ; pluginIdent [Standardwert: //manifest//]
424 : Die Art, wie nach einem vorhandenen Plugin gesucht wird. Entspricht dem Parameter //plugin-ident// des Deploy-Plugins, siehe oben.
425 ; pluginIdentifier [Standardwert: //Implementation-Title=${project.groupId}:${project.artifactId}//]
426 : Identifikator des Plugins, welches aktualisiert oder gelöscht werden soll. Entspricht dem Parameter //plugin-identifier// des Deploy-Plugins, siehe oben.
427 ; jarFile [Standartwert: Haupt-Build-Artifakt des Maven-Projekts]
428 : Pfad zur JAR-Datei, die hochgeladen werden soll, relativ zum Basisverzeichnis des Maven-Projekts.
429 ; disallowInstall [Standardwert: //false//]
430 : Wenn //true// und das Plugin noch nicht existiert, wird abgebrochen und ein Fehler zurückgegeben. Entspricht dem Parameter //disallow-install// des Deploy-Plugins, siehe oben.
431 ; locale [Standardwert: //en//]
432 : Sprache, die für die Installation, Aktualisierung oder Löschung des Plugins genutzt wird. Entspricht dem Parameter //locale// des Deploy-Plugins, siehe oben.
433 ; clearProperties [Standardwert: //false//]
434 : Löscht die Werte aller Plugin-Eigenschaften. Entspricht dem Parameter //clear-properties// des Deploy-Plugins, siehe oben.
435 ; properties
436 : Key-Value-Paare mit Eigenschaften, die an dem Plugin gesetzt werden sollen. Entspricht dem Parameter //property// des Deploy-Plugins, siehe oben.
437
438 === Empfehlung für Plugin-Projekt ===
439
440 Während das Plugin zahlreiche Einstellunsgmöglichkeiten anbietet, reichen meist die Standardwerte aus. Empfohlen wird das folgende Vorgehen bei der Entwicklung von Plugin-Projekten.
441
442 Folgendes Schnippsel sollte in der Profil-Sektion der //pom.xml// eingefügt werden:
443
444 {{code language="xml"}}
445 <properties>
446 <fc-deploy-plugin-maven-plugin.version>1.1.0</fc-deploy-plugin-maven-plugin.version>
447 </properties>
448
449 <profiles>
450 <profile>
451 <id>fc-deploy</id>
452 <activation>
453 <property>
454 <name>fcDeployUrl</name>
455 </property>
456 </activation>
457 <build>
458 <plugins>
459 <plugin>
460 <groupId>de.xima.fc.maven.plugin</groupId>
461 <artifactId>fc-deploy-plugin-maven-plugin</artifactId>
462 <version>${fc-deploy-plugin-maven-plugin.version}</version>
463 <executions>
464 <execution>
465 <goals>
466 <goal>deploy</goal>
467 </goals>
468 </execution>
469 </executions>
470 </plugin>
471 </plugins>
472 </build>
473 </profile>
474 </profiles>
475 {{/code}}
476
477 Das Plugin wird dann anhand des Eintrags //Implementation-Title// im Manifest identifiziert. Hierzu muss der Wert korrekt im Manifest gesetzt werden. Dies kann entweder über das maven-jar-plugin oder über das maven-assembly-plugin geschehen, je nachdem, welches von diesen im Plugin-Projekt genutzt wird:
478
479 {{code language="xml"}}
480 <properties>
481 <xfc.version>6.4.0-SNAPSHOT</xfc.version>
482 <maven-jar-plugin.version>3.2.0</maven-jar-plugin.version>
483 <maven-assembly-plugin.version>3.2.0</maven-assembly-plugin.version>
484 </properties>
485
486 <build>
487 <plugins>
488
489 <!-- If using the maven-jar-plugin -->
490 <plugin>
491 <groupId>org.apache.maven.plugins</groupId>
492 <artifactId>maven-jar-plugin</artifactId>
493 <version>${maven-jar-plugin.version}</version>
494 <configuration>
495 <outputDirectory>${basedir}</outputDirectory>
496 <finalName>${project.artifactId}</finalName>
497 <archive>
498 <manifest>
499 <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
500 </manifest>
501 <manifestEntries>
502 <formcycle-version-requirement>${xfc.version}</formcycle-version-requirement>
503 <Implementation-Title>${project.groupId}:${project.artifactId}</Implementation-Title>
504 <Implementation-Vendor-Id>${project.groupId}</Implementation-Vendor-Id>
505 <Implementation-Version>${project.version}</Implementation-Version>
506 <Build-Timestamp>${maven.build.timestamp}</Build-Timestamp>
507 </manifestEntries>
508 </archive>
509 </configuration>
510 </plugin>
511
512 <!-- If using the maven-assembly-plugin -->
513 <plugin>
514 <groupId>org.apache.maven.plugins</groupId>
515 <artifactId>maven-assembly-plugin</artifactId>
516 <version>${maven-assembly-plugin.version}</version>
517 <executions>
518 <execution>
519 <id>fat-jar</id>
520 <phase>package</phase>
521 <goals>
522 <goal>single</goal>
523 </goals>
524 <configuration>
525 <outputDirectory>${basedir}</outputDirectory>
526 <finalName>${project.artifactId}</finalName>
527 <descriptorRefs>
528 <descriptorRef>jar-with-dependencies</descriptorRef>
529 </descriptorRefs>
530 <appendAssemblyId>false</appendAssemblyId>
531 <archive>
532 <manifestEntries>
533 <Build-Timestamp>${maven.build.timestamp}</Build-Timestamp>
534 <Implementation-Vendor-Id>${project.groupId}</Implementation-Vendor-Id>
535 <Implementation-Title>${project.groupId}:${project.artifactId}</Implementation-Title>
536 <Implementation-Version>${project.version}</Implementation-Version>
537 <formcycle-version-requirement>${xfc.version}</formcycle-version-requirement>
538 </manifestEntries>
539 </archive>
540 </configuration>
541 </execution>
542 </executions>
543 </plugin>
544
545 </plugins>
546 </build>
547 {{/code}}
548
549 Nun kann das Plugin über Maven gebaut und hochgeladen werden. Die URL auf {{formcycle/}}, die Mandant-ID und das Token (Passwort) wird dynamisch über Parameter an Maven übergeben:
550
551 {{code language="bash"}}
552 mvn clean install -DfcDeployUrl="http://localhost:8080/xima-formcycle" -DfcDeployClientId="1" -DfcDeployToken="admin"
553 {{/code}}
554
555 Hinweis: IDE wie Eclipse und IntelliJ erlauben es, eine Build-Konfiguration für das Plugin-Projekt zu erstellen, wo die Parameter //fcDeployUrl//, //fcDeployClientId// und //fcDeployToken// hinterlegt werden können.
556
557 == Versionshistorie ==
558
559 In diesem Abschnitt werden die vorhandenen Versionen des Deploy-Plugins und die jeweiligen Änderungen in dieser Version beschrieben.
560
561 === 1.1.0 ===
562
563 * Anpassungen für {{formcycle/}} 6.4.
564
565 === 1.0.1 ===
566
567 * Verbesserte Fehlerbehandlung bei der Plugin-Installation.
568
569 === 1.0.0 ===
570
571 * Initialer Release
Copyright 2000-2024