Lernziel
In diesem Tutorial lernen Sie, wie Sie ein Nuclos-Projekt in die Entwicklungsumgebung IntelliJ IDEA einbinden.
Voraussetzungen
  • Funktionierende Installation des Nuclos-Projekts (im folgenden Projekt-Installation).
  • JetBrains Intellij IDEA Ultimate: https://www.jetbrains.com/idea/download/#section=windows

  • Maven

  • Git

  • Ajc Plugin für Compiler Setting
  • Java

  • Unter Windows muss Git für lange Dateinamen konfiguriert werden:

    git config --system core.longpaths true

Sonstiges
  • Das Projekt neu bauen
  • Troubleshooting





Konfiguration

Bevor Sie mit der Konfiguration von IDEA beginnen, müssen Sie sowohl das git-Repository des Projekts (im folgenden Projekt-git), als auch das git-Repository des Nuclos-Kerns (im folgenden Kern-git) klonen.

Wechseln Sie nun im git zu dem Tag des Kerns, welcher der Nuclos-Version der Projekt-Installation entspricht (git checkout).


Nun sind Sie bereit, die Konfiguration von IDEA anzugehen.

Richten Sie maven ein: File -> Settings -> Build, Execution, Deployment -> Build Tools -> Maven

Stellen Sie sicher, dass unter File → Settings → Build, Execution, Deployment → Compiler → Java Compiler der Ajc gesetzt ist (Dafür notwendig ist das AspectJ Plugin von IntellJ)

Öffnen Sie das Projekt (Projekt-git) in IDEA: File -> Open...

Importieren Sie das Maven Projekt (ein Popup sollte erscheinen).

Lassen Sie Maven die Quellen generieren.

Stellen Sie die Profile-Settings ein (je nach Projekt), mindestens aber das quick-Profil

Bauen Sie das Modul.

Nun kann der Kern-git eingebunden werden. Öffnen Sie zu diesem Zweck die Modul-Einstellungen:

Hier kann der Kern-git importiert werden (Import Module):

Einige Sourcen werden in Nuclos generiert und sind nicht im Git eingecheckt.

Über:

"nuclos-schema" > rechte Maustaste > Maven > Generate Sources and Update Folders 

werden die Sourcen generiert.

Sobald das Modul geladen ist, navigieren Sie ins Verzeichnis /[Pfad zu Kern-git]/nuclos-war/src/main/webapp/META-INF/.

Hier finden sie eine Datei context-template.xml - Erstellen Sie eine Kopie der Datei im selben Verzeichnis und nennen Sie diese context.xml.

Passen Sie nun die vier value-Parameter (von context.xml) an, so dass diese auf die entsprechenden Konfigurationsdateien zeigen, die sich im Verzeichnis ihres installierten Nuclos-Projekts (Projekt-Installation) befinden.

Nun können Sie auch für den Kern die Quellen mit Maven importieren und das Modul bauen.

Anmerkung: Falls es im Extension-Projekt eine extension-war gibt, hat es sich bewährt, die context.xml statt dessen dort zu erstellen. also im Verzeichnis /[Pfad zu Project-git]/<extension>-war/src/main/webapp/META-INF/. Das Verzeichnis /[Pfad zu Kern-git]/nuclos-war/src/main/webapp/META-INF/ sollte dann besser keine context.xml enthalten.
 

Um den Server einzurichten, gehen Sie auf Run -> Edit Configurations... :

 
 Erstellen Sie einen neuen Tomcat-Server:
 
 

Konfigurieren Sie diesen:

Application ServerAm besten, Sie laden sich den Tomcat-Server in der von Nuclos verwendeten Version herunter (die Versionsnummer finden Sie zum Beispiel im Tomcat-Verzeichnis der Projekt-Installation /[Pfad zum Projekt]/nuclos/tomcat/apache-tomcat-<Version>)), und verweisen darauf.
Die Verwendung des Pfades /[Pfad zum Projekt]/nuclos/tomcat/apache-tomcat-<Version> kann zu Problemen führen.
VM Options-Dfunctionblock.dev=true -mx1024m
Deploy at server startup

Add -> Artifact... -> nuclos-war-exploded

(oder falls ein extension-war existiert, natürlich extenstion-war-exploded)

Application context/nuclos-war - bzw. der path der in der context.xml im Context-Tag eingetragen ist. Bei Extensions kann dieser anders lauten.

Unter Umständen müssen noch die Ausführungsrechte der Tomcat-Start-Scripte gesetzt werden, z.B.:

chmod u+x apache-tomcat-..../*.sh

 

In manchen Fällen wird context.xml beim Deployment nicht in das target-Verzeichnis übernommen.

In diesem Fall hilft es die Datei context.xml unter

File > Project Structure... > Project Settings > Artifacts > Output Layout > META-INF

hinzuzufügen.

Wenn das Projekt auf einer Oracle-Datenbank basiert, ist ein weiterer Schritt notwendig:

Die ojdbc6.jar (ggf. in der passenden Oracle-Version) muss das Verzeichnis /[Pfad zu Kern-git]/nuclos-war/src/main/webapp/META-INF/lib kopiert werden (bei Extensions wieder entsprechend <extension-war>).


Der Server kann jetzt gestartet werden. (Am besten im Debug-Modus)

Wenn es beim Server-Start eines Extensions-Projekts Kompilierfehler bei den Regeln gibt, weil einige Nuclos-Klassen nicht gefunden werden können, stellen Sie sicher, dass die Bibliothek nuclos-ccce.jar unter dem Pfad /[Pfad zu Projekt-git]/<extension>-war/target/<extension>-war/webapp/WEB-INF/lib zu finden ist.

Wenn die Datei dort fehlt, fügen Sie die nuclos-ccce - Dependency aus der /nuclos-war/pom.xml in die  /<extension>-war/pom.xml ein. Danach das Projekt neu bauen (s.u.).


Abschließend muss noch der Client erstellt werden:


Konfiguration des Clients:

Main classorg.nuclos.client.main.Nuclos
VM options (Port muss ggf. angepasst werden)

-ea
-Xmx768m
-Dserver=http://localhost:8080/nuclos-war
-Dfunctionblock.dev=true
-Dsun.awt.disablegrab=true

Use classpath of modulenuclos-client

Danach kann der Client gestartet werden. (Am besten im Debug-Modus)

Das Projekt neu bauen

Eine erfolgreiche Einbindung von Nuclos in Intellij ist nicht immer einfach und ein Scheitern kann verschiedene Ursachen haben. Hier ist möglicherweise etwas Geduld gefragt. Manchmal reicht es auch, das Projekt noch einmal von Null an bauen zu lassen.

Wenn Sie an der Konfiguration oben etwas geändert haben und/oder nochmal alles sauber aufbauen wollen, gehen Sie bitte wie folgt vor:

Intellij aufräumen und neu startenUnter File > Invalidate Caches... alle Checkboxen anhaken und Invalidate and Restart

Reload all Maven Projects

Clean auf allen root - Maven-Projects 

Generate Sources and Update Folders auf allen root - Maven-Projects

Rebuild Project

Troubleshooting

IntelliJ erkennt /[Pfad zu Projekt-Installation]/tomcat/apache-tomcat-9.x nicht als Tomcat-Home an.Die entsprechende Tomcat-Version muss manuell installiert werden. Hier eine Beispielanleitung: https://medium.com/@dolthead/upgrade-intellij-idea-to-tomcat-9-0-8-d2a560606231

Das Projekt wird gebaut, aber der Server startet nicht mit der Meldung:

"SEVERE: Unable to process Jar entry [module-info.class] from Jar [jar:file:/sahibinden/repo/services/sahibinden-web/target/sahibinden-web/WEB-INF/lib/classgraph-4.6.7.jar!/] for annotations org.apache.tomcat.util.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 19"

Es handelt sich um einen Bug mit der Kombination aus Tomcat - und Java - Version (https://github.com/classgraph/classgraph/issues/291).
Die neueste JDK 8 benötigt z.B. Tomcat 9.
Localhost:8080 is already in use.Es läuft bereits ein Programm auf dem Port 8080. Dieses passiert z.B. in Ubuntu, wenn man Tomcat aus den Paketquellen installiert und nicht manuell abschaltet.
Weitere Gründe für das Scheitern des Server-StartsDas in der Projekt-Installation angegebene Schema muss in der Datenbank existieren (es kann aber leer sein).

Mögliche Probleme und Behebung

Serverstart: nuclos-conf.xml nicht gefunden

→ Projekt - open Module Settings

manuell hinzufügen

  • No labels