Änderungen von Dokument Plugin-Entwicklung


Von Version 9.1
bearbeitet von awa
am 25.02.2022, 21:32
Änderungskommentar: Uploaded new attachment "pom.xml", version 1.6
Auf Version 4.14
bearbeitet von awa
am 25.02.2022, 13:04
Änderungskommentar: Es gibt keinen Kommentar für diese Version

Zusammenfassung

Details

Seiteneigenschaften
Inhalt
... ... @@ -1,5 +1,6 @@
1 1  {{content/}}
2 2  
3 +== Plugins für zusätzliche Funktionalitäten ==
3 3  
4 4  {{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.
5 5  
... ... @@ -9,9 +9,9 @@
9 9  
10 10  == Maven-Setup ==
11 11  
12 -Zu Beginn der Entwicklung eines Plugins ist es nötig, das entsprechende Entwicklungsprojekt aufzusetzten und zu konfigurieren.
13 +Zu Beginn der Entwicklung eines Plugins ist es nötig das entsprechende Entwicklungsprojekt aufzusetzten und zu konfigurieren.
13 13  
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.
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.
15 15  
16 16  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.
17 17  
... ... @@ -33,7 +33,7 @@
33 33   <enabled>false</enabled>
34 34   </snapshots>
35 35   <id>xima</id>
36 - <name>fc-plugin-dev</name>
37 + <name>libs-release</name>
37 37   <url>https://artifactory.xima-services.de/artifactory/fc-plugin-dev</url>
38 38   </repository>
39 39   </repositories>
... ... @@ -44,7 +44,7 @@
44 44   <enabled>false</enabled>
45 45   </snapshots>
46 46   <id>xima</id>
47 - <name>fc-plugin-dev</name>
48 + <name>plugins-release</name>
48 48   <url>https://artifactory.xima-services.de/artifactory/fc-plugin-dev</url>
49 49   </pluginRepository>
50 50   </pluginRepositories>
... ... @@ -65,20 +65,18 @@
65 65  {{/code}}
66 66  {{/panel}}
67 67  
68 -== Maven-Projekteinrichtung ===
69 +== Maven-Projekteinrichtung
69 69  
70 70  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"]].
71 71  
72 -=== Artekfakte und Abhängigkeiten ===
73 +=== Artekfakte und Abhängigkeiten
73 73  
74 74  {{info}}
75 75  Alle Abhängigkeiten zu {{formcycle case="dat"/}} sind im scope "provided" zu definieren!
76 76  {{/info}}
77 77  
78 -Eine fertige einfache //pom.xml// können Sie [[hier herunterladen>>attach:pom.xml||rel="__blank"]].
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/]].
79 79  
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||target="_blank"]].
81 -
82 82  In der //pom.xml// des Plugin-Projekts kann diese Abhängigkeit wie folgt eingebunden werden:
83 83  
84 84  {{code language="xml"}}
... ... @@ -96,7 +96,7 @@
96 96   </dependencies>
97 97  {{/code}}
98 98  
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:
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:
100 100  
101 101  {{code language="xml"}}
102 102   <dependency>
... ... @@ -107,22 +107,22 @@
107 107   </dependency>
108 108  {{/code}}
109 109  
110 -Eine entsprechende Benutzung ist vor allem bei der Verwendung der Datenbankschnittstelle sowie bei der Implementierung von eigenen Verarbeitungen nötig.
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"]].
111 111  
112 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).
113 113  
114 -=== Manifest und Fat JAR ===
113 +=== Manifest und Fat JAR
115 115  
116 116  In der //META-INF/MANIFEST.MF// in der Plugin-JAR-Datei sollten folgende Informationen stehen:
117 117  
118 118  ; formcycle-version-requirement
119 -: Erforderlich. Version von {{formcycle/}}, für die das Plugin gedacht ist. Ist erforderlich, damit {{formcycle/}} bei der Installation die Kompatibilität prüfen kann.
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.
120 120  ; Implementation-Version
121 -: Erforderlich. Version des Plugins; Diese wird z.B. in der Oberfläche angezeigt.
120 +: Erforderlich. Version des Plugins, wird etwa in der Oberfläche angezeigt.
122 122  ; Build-Time oder Build-Timestamp
123 -: Optional. Wird bei SNAPSHOT-Versionen mit angezeigt, um den SNAPSHOT zu identifizieren.
122 +: Optional, wird bei SNAPSHOT-Versionen mit angezeigt, um den SNAPSHOT zu identifizieren.
124 124  ; Implementation-Title
125 -: Optional. Wird standardmäßig etwa vom Deploy-Plugin verwendet, um das Plugin zu identifzieren.
124 +: Optional, wird standardmäßig etwa vom Deploy-Plugin verwendet, um das Plugin zu identifzieren.
126 126  
127 127  Diese Informationen können wie unten beschrieben mittels des //maven-assembly-plugin// in die Manifest-Datei geschrieben werden.
128 128  
... ... @@ -138,7 +138,7 @@
138 138   <maven-assembly-plugin.version>3.3.0</maven-assembly-plugin.version>
139 139   </properties>
140 140   <build>
141 - <finalName>${project.artifactId}</finalName>
140 + <finalName>${project.parent.artifactId}</finalName>
142 142   <plugins>
143 143   <plugin>
144 144   <groupId>org.apache.maven.plugins</groupId>
... ... @@ -152,7 +152,7 @@
152 152   <goal>single</goal>
153 153   </goals>
154 154   <configuration>
155 - <finalName>${project.artifactId}</finalName>
154 + <finalName>${project.parent.artifactId}</finalName>
156 156   <appendAssemblyId>false</appendAssemblyId>
157 157   <descriptorRefs>
158 158   <descriptorRef>jar-with-dependencies</descriptorRef>
... ... @@ -198,12 +198,8 @@
198 198   Hinzufügen des Archetypes-Katalogs in Eclipse
199 199  {{/figure}}
200 200  
201 -{{figure image="eclipse-archetype-select.png" width="500"}}
202 - Auswahl eines Archetypes beim Erstellen eines Maven-Projekts in Eclipse
203 -{{/figure}}
200 +Für einige häufig verwendete Plugin-Typen stehen [[Maven-Archetypes>>url:https://maven.apache.org/guides/introduction/introduction-to-archetypes.html]] bereits, um schnell ein Maven-Projekt aufsetzen zu können.
204 204  
205 -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.
206 -
207 207  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:
208 208  
209 209  {{code}}
... ... @@ -212,63 +212,18 @@
212 212  
213 213  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.
214 214  
215 -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.
210 +Alle vorhandenen Archetypes und deren Versionen können im [[Archetype-Katalog>>url:https://artifactory.xima-services.de/artifactory/libs-release-local/archetype-catalog.xml]] eingesehen werden.
216 216  
217 217  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:
218 218  
219 219  {{code language="plaintext"}}https://artifactory.xima-services.de/artifactory/libs-release-local/archetype-catalog.xml{{/code}}
220 220  
221 -== Deploy-Plugin ==
216 +== Deploy-Plugin
222 222  
223 -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:
218 +TODO
224 224  
225 -* Ein Maven-Plugin, welches nach dem Bauen das Plugin via HTTP an einen laufenden {{formcycle/}}-Server sendet
226 -* Ein Plugin für {{formcycle/}}, welche die Gegenstelle in {{formcycle/}} bereitstellt und das Plugin aus dem HTTP-Request in {{formcycle/}} installiert.
220 +== FC-Server-Plugin
227 227  
228 -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:
222 +TODO
229 229  
230 -{{code language="xml"}}
231 - <properties>
232 - <fc-deploy-plugin-maven-plugin.version>7.0.1<fc-deploy-plugin-maven-plugin.version/>
233 - <build>
234 - <plugins>
235 - <plugin>
236 - <groupId>de.xima.fc.maven.plugin</groupId>
237 - <artifactId>fc-deploy-plugin-maven-plugin</artifactId>
238 - <version>${fc-deploy-plugin-maven-plugin.version}</version>
239 - <executions>
240 - <execution>
241 - <id>upload</id>
242 - <phase>package</phase>
243 - <goals>
244 - <goal>deploy</goal>
245 - </goals>
246 - </execution>
247 - </executions>
248 - </plugin>
249 - </plugins>
250 - </build>
251 -{{/code}}
252 252  
253 -Sofern das Deploy-Plugin bereits in {{formcycle/}} installiert ist, kann das Plugin-Projekt dann beim Bauen wie folgt hochgeladen werden:
254 -
255 -{{code language="bash"}}
256 -mvn package -DfcDeployUrl=http://localhost:8080/xima-formcycle -DfcDeployToken=admin
257 -{{/code}}
258 -
259 -Wird Eclipse benutzt, kann auch eine Launch-Configuration mit den //fcDeployUrl// und dem //fcDeployToken// angelegt werden.
260 -
261 -== FC-Server-Plugin ==
262 -
263 -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.
264 -
265 -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:
266 -
267 -{{code language="bash"}}
268 -mvn package fc-server:run-ms-war -DxfcVersion=7.0.10
269 -{{/code}}
270 -
271 -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
272 -
273 -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.
274 -
eclipse-archetype-select.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.awa
Größe
... ... @@ -1,1 +1,0 @@
1 -66.8 KB
Inhalt
pom.xml
Author
... ... @@ -1,1 +1,1 @@
1 -XWiki.awa
1 +XWiki.rth
Größe
... ... @@ -1,1 +1,1 @@
1 -5.9 KB
1 +2.2 KB
Inhalt
... ... @@ -2,98 +2,55 @@
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 -->
6 6   <groupId></groupId>
7 7   <artifactId></artifactId>
8 8   <version></version>
9 - <name></name>
10 -
11 11   <packaging>jar</packaging>
12 12  
10 + <name></name>
11 +
13 13   <properties>
14 14   <!-- Configuration -->
15 15   <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
16 16  
17 17   <!-- Dependencies -->
18 - <xfc.version>7.0.10</xfc.version>
19 - <junit-jupiter.version>5.6.0</junit-jupiter.version>
17 + <xfc-version>7.0.9</xfc-version>
20 20  
21 21   <!-- Plugins -->
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>
20 + <maven-compiler-plugin-version>3.8.1</maven-compiler-plugin-version>
21 + <maven-jar-plugin-version>3.1.0</maven-jar-plugin-version>
28 28   </properties>
29 29  
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 +
30 30   <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" -->
34 34   <dependency>
35 35   <groupId>de.xima.fc</groupId>
36 - <artifactId>fc-logic</artifactId>
37 - <version>${xfc.version}</version>
35 + <artifactId>fc-plugin-common</artifactId>
36 + <version>${xfc-version}</version>
38 38   <scope>provided</scope>
39 39   </dependency>
40 40  
41 - <!-- JUnit for writing unit tests -->
42 42   <dependency>
43 - <groupId>org.junit.jupiter</groupId>
44 - <artifactId>junit-jupiter</artifactId>
45 - <version>${junit-jupiter.version}</version>
46 - <scope>test</scope>
41 + <groupId>de.xima.fc</groupId>
42 + <artifactId>fc-logic</artifactId>
43 + <version>${xfc-version}</version>
44 + <scope>provided</scope>
47 47   </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 -
53 53   </dependencies>
54 54  
55 55   <build>
56 - <finalName>${project.artifactId}</finalName>
57 -
58 58   <plugins>
59 -
60 - <!-- Upload the plugin to a running FORMCYCLE server as part of the Maven build process -->
61 - <!-- mvn clean install -DfcDeployUrl=http://localhost:8080/xima-formcycle -DfcDeployToken=admin -->
62 62   <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 - <executions>
67 - <execution>
68 - <id>upload</id>
69 - <phase>package</phase>
70 - <goals>
71 - <goal>deploy</goal>
72 - </goals>
73 - </execution>
74 - </executions>
75 - </plugin>
76 -
77 - <!-- Start a preconfigured FORMCYCLE server-->
78 - <!-- mvn fc-server:run-ms-war -->
79 - <plugin>
80 - <groupId>de.xima.fc.maven.plugin</groupId>
81 - <artifactId>fc-server-maven-plugin</artifactId>
82 - <version>${fc-server-maven-plugin.version}</version>
83 - <configuration>
84 - <bootstrap>
85 - <pluginManagement>
86 - <deployMavenProject>true</deployMavenProject>
87 - </pluginManagement>
88 - </bootstrap>
89 - </configuration>
90 - </plugin>
91 -
92 - <!-- Configure the compilation process. At least Java 11 is required. -->
93 - <plugin>
94 94   <groupId>org.apache.maven.plugins</groupId>
95 95   <artifactId>maven-compiler-plugin</artifactId>
96 - <version>${maven-compiler-plugin.version}</version>
53 + <version>${maven-compiler-plugin-version}</version>
97 97   <configuration>
98 98   <release>11</release>
99 99   <encoding>UTF-8</encoding>
... ... @@ -102,11 +102,10 @@
102 102   </configuration>
103 103   </plugin>
104 104  
105 - <!-- Configure how the JAR is created, including manifest entries -->
106 106   <plugin>
107 107   <groupId>org.apache.maven.plugins</groupId>
108 108   <artifactId>maven-jar-plugin</artifactId>
109 - <version>${maven-jar-plugin.version}</version>
65 + <version>${maven-jar-plugin-version}</version>
110 110   <configuration>
111 111   <archive>
112 112   <manifest>
... ... @@ -113,58 +113,11 @@
113 113   <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
114 114   </manifest>
115 115   <manifestEntries>
116 - <formcycle-version-requirement>${xfc.version}</formcycle-version-requirement>
117 - <Build-Timestamp>${maven.build.timestamp}</Build-Timestamp>
118 - <Implementation-Title>${project.groupId}:${project.artifactId}</Implementation-Title>
119 - <Implementation-Vendor-Id>${project.groupId}</Implementation-Vendor-Id>
120 - <Implementation-Version>${project.version}</Implementation-Version>
72 + <formcycle-version-requirement>${xfc-version}</formcycle-version-requirement>
121 121   </manifestEntries>
122 122   </archive>
123 123   </configuration>
124 124   </plugin>
125 -
126 - <!-- Build a fat JAR with all dependencies included -->
127 - <plugin>
128 - <groupId>org.apache.maven.plugins</groupId>
129 - <artifactId>maven-assembly-plugin</artifactId>
130 - <version>${maven-assembly-plugin.version}</version>
131 - <executions>
132 - <execution>
133 - <id>fat-jar</id>
134 - <phase>package</phase>
135 - <goals>
136 - <goal>single</goal>
137 - </goals>
138 - <configuration>
139 - <finalName>${project.artifactId}</finalName>
140 - <appendAssemblyId>false</appendAssemblyId>
141 - <descriptorRefs>
142 - <descriptorRef>jar-with-dependencies</descriptorRef>
143 - </descriptorRefs>
144 - <archive>
145 - <manifest>
146 - <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
147 - </manifest>
148 - <manifestEntries>
149 - <formcycle-version-requirement>${xfc.version}</formcycle-version-requirement>
150 - <Build-Timestamp>${maven.build.timestamp}</Build-Timestamp>
151 - <Implementation-Title>${project.groupId}:${project.artifactId}</Implementation-Title>
152 - <Implementation-Vendor-Id>${project.groupId}</Implementation-Vendor-Id>
153 - <Implementation-Version>${project.version}</Implementation-Version>
154 - </manifestEntries>
155 - </archive>
156 - </configuration>
157 - </execution>
158 - </executions>
159 - </plugin>
160 -
161 - <!-- Use JUnit to run test classes -->
162 - <plugin>
163 - <groupId>org.apache.maven.plugins</groupId>
164 - <artifactId>maven-surefire-plugin</artifactId>
165 - <version>${maven-surefire-plugin.version}</version>
166 - </plugin>
167 167   </plugins>
168 168   </build>
169 169  </project>
170 -