Search the FirstSpirit Knowledge Base
Hallo zusammen,
wir stellen gerade auf isolated um und nachdem wir alle Module erfolgreich umgestellt haben, tauchen noch ein paar Probleme auf.
Es gibt ein paar Stellen, wo in Templates sowas hier verwendet wird:
$CMS_SET(set_JSON_parser, class("org.json.simple.parser.JSONParser").new())$
Und auch ein paar Stellen in Skripten, wo sowas gemacht wird:
import de.pinuts.XXXX.firstspirit.json.mediagallery.*;
parser = new MediaGalleryParser(context, jsonString, prefix, true);
Gibt es dazu eine einfache Lösung oder "müssen" wir alles umbauen? Ich habe schon probiert, eine PublicComponent daraus zu machen und dann ohne Paketnamen aufzurufen, aber das hilft nicht.
Danke und Grüße
Timo
So, ich habe nun auch das letzte Problem gelöst.
Das gradle Plugin definiert den Scope für die selbst erstellte Bibliothek pauschal immer als "module". Wenn man nun Teile seiner Funktionen als scope=server haben will, dann muss man:
1. Neues Subproject (in meinem Fall XXXPublicUtils) in gradle erstellen
2. Die Funktionen, die für scope=server benötigt werden, dorthin verschieben, in meinem Fall habe ich einfach das Paket de.pinuts.XXXX.firstspirit.json, in dem sich mein MediaGallery-Gedöns befindet komplett in dieses Subproject verschoben.
3. Das Subproject dann per fsServerCompile in der build.gradle in die Dependencies laden.
fsServerCompile project(':XXXPublicUtils')
Ich merke gerade, in der Vorschau wird beides prima ausgeführt. Nur bei der Generierung leider nicht.
Der Vollständigkeit halber: Bei der Generierung kommen die folgenden Fehlermeldungen:
ERROR 07.05.2020 13:55:13.372{g-node=249780} (de.espirit.firstspirit.generate.SiteProduction): java.lang.ClassNotFoundException: de.pinuts.XXXX.firstspirit.json.mediagallery.MediaGallery
Bzw.
ERROR 07.05.2020 13:02:43.037{g-sec=253386,g-node=249780,g-entity=Products(8896)} (de.espirit.firstspirit.generate.SiteProduction): java.lang.ClassNotFoundException: org.json.simple.parser.JSONParser
Die Antwort scheint wohl zu sein, dass im Modul der Scope der Bibliothek auf "server" gestellt sein muss, also:
<resource name="com.googlecode.json-simple:json-simple" scope="server" mode="isolated" version="1.1.1" minVersion="1.1.1">lib/json-simple-1.1.1.jar</resource>
Ich verwende das FSM-Gradle-Plugin, dort habe ich es entsprechend in der build.gradle definiert:
fsServerCompile group: 'com.googlecode.json-simple', name: 'json-simple', version: '1.1.1'
Die Klasse MediaGallery kommt aber aus meinem Modul selbst, weiss jemand, wie man dafür definiert, dass der scope=server ist? Der Eintrag in der module.xml sieht ja so aus und wird vom gradle-Modul erstellt.
<resource name="de.pinuts.XXX.firstspirit:XXXUtils" version="4.0.2" scope="module" mode="isolated">lib/XXXUtils-4.0.2.jar</resource>
So, ich habe nun auch das letzte Problem gelöst.
Das gradle Plugin definiert den Scope für die selbst erstellte Bibliothek pauschal immer als "module". Wenn man nun Teile seiner Funktionen als scope=server haben will, dann muss man:
1. Neues Subproject (in meinem Fall XXXPublicUtils) in gradle erstellen
2. Die Funktionen, die für scope=server benötigt werden, dorthin verschieben, in meinem Fall habe ich einfach das Paket de.pinuts.XXXX.firstspirit.json, in dem sich mein MediaGallery-Gedöns befindet komplett in dieses Subproject verschoben.
3. Das Subproject dann per fsServerCompile in der build.gradle in die Dependencies laden.
fsServerCompile project(':XXXPublicUtils')