Virtueller Campus Virtueller Campus Horw mit interaktiver Steuerung Bachelor Diplomarbeit FS 2013
Inhaltsverzeichnis 1. EINLEITUNG... 1 2. VORBEDINGUNGEN... 1 3. ORDNERSTRUKTUR ERWEITERN... 1 4. PROJEKT UND BUILD.XML... 2 5. NATIVE BIBLIOTHEKEN HINZUFÜGEN... 5 Abbildungsverzeichnis ABBILDUNG 1: ERWEITERTE ORDNERSTRUKTUR... 1 ABBILDUNG 2: EIGENSCHAFTEN EINES PROJEKTES... 2 ABBILDUNG 3: KLASSENPFAD DES PROJEKTES ERWEITERN... 3 ABBILDUNG 4: VERZEICHNISSTRUKTUR FÜR EXTERNE BIOBLIOTHEKEN... 5 ABBILDUNG 5: AUFTEILUNG ZWISCHEN JARS UND NATIVE... 5 ABBILDUNG 6: NEUERSTELLUNG DES CORE-JAR... 6 ABBILDUNG 7: WONDERLAND JAR NEU ERZEUGEN... 6 Dominik Alessandri II
1. Einleitung Um für Open Wonderland Zellen, Komponenten und Plugins zu entwickeln, werden teilweise zusätzliche Bibliotheken im JAR-, DLL- oder SO Format benötigt. Dieses HowTo beschreibt, wie das Open Wonderland angepasst werden muss, um eine Bibliothek auf den Client oder den Server zu deployen. 2. Vorbedingungen Um eine Zelle, eine Komponenten oder ein Plugin zu erstellen, muss ein Projekt im Netbeans mit folgender Paketstruktur eröffnet sein: org.jdesktop.wonderland.modules.<<mymodulname>>.client org.jdesktop.wonderland.modules.<<mymodulname>>.common org.jdesktop.wonderland.modules.<<mymodulname>>.server Dem Projekt müssen noch einige JARs vom Open Wonderland in den Klassenpfad hinzugefügt werden: wonderland/core/build/lib/wonderland-client.jar wonderland/core/build/lib/wonderland-common.jar wonderland/core/build/lib/wonderland-server.jar wonderland/core/ext/jme20/target/jme.jar wonderland/modules/foundation/content-repository/build/client/contentrepo-client.jar wonderland/core/ext/common/swing-layout-1.0.jar wonderland/core/ext/common/mtgame.jar wonderland/core/ext/sgs/sgs-server-dist-0.9.10/lib/sgs-server-api-0.9.10.jar Eine detaillierte Beschreibung, wie ein Modul aufgesetzt werden muss, ist in den Tutorials der Open Wonderland Community vorhanden. Dort ist auch beschrieben, wo das leere Rahmenprojekt bezogen werden kann. 3. Ordnerstruktur erweitern Um die Bibliothek dem Modul zur Verfügung zu stellen, muss die Ordnerstruktur des Moduls um ein Verzeichnis lib erweitert werden. Danach sieht die Struktur wie folgt aus: Abbildung 1: Erweiterte Ordnerstruktur Dominik Alessandri 1
Beinhaltet das Modul Bilder oder sonstige Medien, kann ein Verzeichnis art angelegt werden. In diesem Verzeichnis sollten alle grafischen Ressourcen abgelegt werden. 4. Projekt und Build.xml Nachdem die Ordnerstruktur erweitert wurde, können nun alle nötigen JARs in das Verzeichnis lib kopiert werden. Nachdem Kopieren muss noch der Klassenpfad des Freeform Projekts im Netbeans angepasst werden. Dazu sind folgende Schritte nötige: Schritt 1: Rechte Maustaste auf das Projekt und die Projekteigenschaften öffnen Abbildung 2: Eigenschaften eines Projektes Dominik Alessandri 2
Schritt 2: JARs dem Klassenpfad hinzufügen Abbildung 3: Klassenpfad des Projektes erweitern Sobald der Klassenpfad angepasst ist, wird der Source-Code sofort kontrolliert. Es sollte nicht mehr zu Buildfehlern wegen nicht vorhandenen Paketen kommen. Als letzten Schritt muss dem Build-Script noch bekannt gemacht werden, dass die neuen JAR s auch in das JAR des Moduls gepackt werden sollen. Im Build.xml muss nach folgender Zeile <import file="${modules.dir}/build-tools/build-scripts/modulebuild.xml"/> der Klassenpfad angepasst werden mit unseren neuen JARs. Dies wird mit folgendem Code erledigt. Beim Property muss, je nachdem wo das JAR benötigt wird, zwischen client, sever und common unterscheiden werden. <pathconvert property="module-client.classpath"> <path location="${modules.dir}/foundation/appbase/build/client /appbase-client.jar"/> <path location="${modules.dir}/foundation/appbase/build/client/ appbase-client-cell.jar"/> <path location="${modules.dir}/foundation/hud/build/client/hudclient.jar"/> Dominik Alessandri 3
<path location="${current.dir}/lib/mynewjar.jar"/> </pathconvert> Als nächsten Schritt muss nun ein neues Target erstellt werden. Im neuen Target werden dem JAR für den Client oder Server die nötigen JARs mitgegeben. <target name="distnew" depends="build"> <mkdir dir="${module.dist.dir}"/> <module name="${module.name}" majorversion="1" minorversion="0" jarfile="${module.dist.dir}/${module.name}.jar" moduledescription="${module.description}" builddir="${build.dir}"> <client dir="${current.dir}/lib"> <include name="*.jar"/> <clientjar name="${module.name}-client" basedir="${build.classes.dir}"> <include name="${module.src}/client/**"/> <fileset dir="${current.dir}/src/classes"> <include name="${module.src}/client/resources/**"/> </fileset> <include name="${module.src}/common/**"/> </clientjar> </client> <server dir="${current.dir}/lib"> <include name="*.jar"/> <serverjar name="${module.name}-server" basedir="${build.classes.dir}"> <include name="${module.src}/server/**"/> <include name="${module.src}/common/**"/> </serverjar> </server> </module> </target> Der letzte Schritt ist, das Deploy-Target anzupassen, so dass das neue Dist-Target verwendet wird. Dabei muss im Target deploy bei den Abhängigkeiten (depends) dist durch distnew ausgetauscht werden. Das Target sollte danach wie folgt aussehen: <target name="deploy" depends="distnew, -module-deploy"/> Dominik Alessandri 4
5. Native Bibliotheken hinzufügen Um eine native Bibliothek z.b. eine DLL in Open Wonderland zu integrieren muss der Core des Servers und des Clients neu kompiliert werden. Vor dem Kompilieren muss die DLL- oder SO-Datei in das richtige Verzeichnis der Open Wonderland Struktur kopierte werden. Die Bibliotheken müssen, je nach ihrer Bestimmung für Windows, Linux oder Mac OS und dessen Architektur x86 oder x64, in ein anderes Verzeichnis kopiert werden. Das Grundverzeichnis aller nativen Bibliotheken ist wonderland/core/ext/ Abbildung 4: Verzeichnisstruktur für externe Biobliotheken Jedes Verzeichnis ist wieder aufgebaut in JARs und native Bibliotheken. Abbildung 5: Aufteilung zwischen JARs und Native Nachdem die Bibliotheken in die entsprechenden Verzeichnisse kopiert wurden, kann der Core-Teil des Open Wonderland neu kompiliert werden. Dominik Alessandri 5
Abbildung 6: Neuerstellung des Core-JAR Ist der Schritt jar des Core s beendet, kann auf dem Wonderland Projekt das Buildtarget package ausgeführt werden. Abbildung 7: Wonderland JAR neu erzeugen Wird der Server nun mit dem neuen Wonderland.jar gestartet, sind die Bibliotheken für alle weiteren Module verfügbar. Das Java Web Start übernimmt die Auslieferung der JARs und weil die nativen Bibliotheken in ein JAR verpackt wurden, werden auch sie mit dem Aufruf des Clients verteilt. Dominik Alessandri 6