OpenCMS: VyvojModuluPodEclipse |
from Wiki KIVu |
Předpokladem pro vývoj modulů pod Eclipse je nainstalovaný Eclipse s podporou vývoje Java EE aplikací
(např. Eclipse IDE for Java EE Developers). Celý tento návod platí pro situaci, kdy Eclipse i OpenCms jsou spuštěny na stejném stroji (tj. na localhost
).
Hodí se pro úpravy pod /sites/
adresářem ve VFS, který není přístupný formou modulu. Implicitně je WebDAV na OpenCms 7 zapnut, detaily pro přístup z Eclipse na http://opencms-wiki.org/WebDAV_access_to_the_OpenCms_VFS#Eclipse_WebDAV_plugin.
Stručná rekapitulace:
http://localhost:8080/opencms7/webdav/
)
Opencms moduly lze vyvíjet v Eclipsu pomocí pluginu Opencms Module Developer. Odkaz na jeho stažení a video tutorial, který vám pomůže s jeho nastavením a používáním najdete na Opencms-Wiki (!!!Pozor, nespleťte si jej s pluginem laughingpanda). Video tutorial si před dalším pokračováním projděte. Výhodou pluginu je, že pomocí kontextového menu je možnost editovaný obsah modulu do opencms nejen nakopírovat, ale rovnou i publikovat, což ušetří spoustu času.
Jeho nevýhodou je však nemožnost editace obsahových stránek mimo modul na frontendu, které mohou být uloženy ve VFS v podadresáři /sites/. K jejich editaci využijeme synchronizaci obsahu Opencms.
Administration view => Workplace Tools => Synchronization settings
.
C:\opencms_vfs
/sites/default/test/
File => New => Projekt => Dynamic Web Projekt
{TOMCAT_HOME}/webapps/opencms/WEB-INF/lib/
a jsou to opencms.jar
popř. knihovny pro práci s JSTL jstl.jar a standard.jar
.
File => New => Projekt => Dynamic Web Projekt
opencms.jar
)
/system/modules/{MUJ_MODUL}/lib/
(viz návod?). V Eclipsu tedy bude stačit exportovat java package do podadresáře /lib/ adresáře modulu v RFS, na který máme napojený Eclipse Opencms Module Developer projekt.
Export
java package => Java - JAR File
=> Zaškrnout políčko v src {JMENO_PACKAGE}
u Projektu s Java třídami => Export Path
nastavte např. na {ECLIPSE_PROJECT_PATH}/lib/{JMENO_PACKAGE}.jar
, kde {ECLIPSE_PROJECT}
je právě projekt, který editujem pomocí Opencms Module Developeru.
{ECLIPSE_PROJECT}
do Opencms VFS.
Doporučuji použít ResourceBundle editor plugin, který vytvoří paralelní editační pole pro každou jazykovou variantu - properties soubor je jen potřeba otevřít přes Open With... -> ResourceBundle Editor
V OpenCMS zapomeňte na postupy typu die("hokus");
a podobné. Získat z OpenCMS nějakou rozumnou odezvu ve chvíli kdy něco nefunguje je téměř nemožné. Naštěstí je díky vývojovému prostředí Eclipse možné zdrojový kód krokovat a sledovat hodnoty jednotlivých proměnných. Návod lze nalézt na wiki OpenCMS, ale pro jistotu ho zde přepíši.
./bin/catalina.sh jpda start
. Díky tomuto je možné se na tomcat vzdáleně připojit a tahat z něho informace potřebné k debugování. K Jetty se dá také vzdáleně připojit. Stačí spustit s parametry java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000 -jar start.jar
run -> debug configurations... -> remote java application -> pravoklik -> new
.
Stejně jako vše s těmito technologiemi, ani toto není stoprocentní. Pokud vám eclipse vrátí hlášku connection refused je možné že budete muset nastavit port / host / něco jiného přímo v souboru catalina.sh / catalina.bat. Nebo že bude pouze stačit restartovat eclipse a tomcat. Z principů OpenCMS je logické, že krokovat .java soubor lze pouze tehdy, pokud se jedná o odraz .class souboru, který je ve VFS. Nezapomeňte přitom, že v OpenCMS je nutné na tyto soubory aplikovat deploy a následně ještě obvykle i restartovat Tomcat.
Nejprve následující modul naimportujte do opencms (Nahrajte soubor do RFS ${opencms_home}/WEB-INF/packages/modules/
a poté v opencms workplace Administration view => Module management => Import module from server
).
Následující modul naimportujte jako databázi (Nahrajte soubor do RFS ${opencms_home}/WEB-INF/packages/
a v opencms workplace Administration view => Database Management => Import file from Server
).
Pozn. Tento adresář bude synchronizován s adresářem v RFS.
Pro názornou ukázku si stáhněte následující Eclipse projekty. Stačí je do Eclipsu naimportovat.
Tato struktura je udělaná tak, aby usnadnila práci při vývoji modulu. Není optimalizovaná na vytvoření jeho produkční podoby. Základní shrnutí:
src/.java
soubory, tak pages/.jsp
stránky
classes/.class
podobě -- tj. nikoli jako lib/modulname.jar
archiv
Při úpravách v Eclipse se proto snadno vytvoří aktuální .class soubory, ty se snadno přes OpenCms Eclipse plugin nahrají do OpenCms, otestuje se přes zároveň nahrané JSP stránky, a celý proces se zrychlí (protože se nemusí dělat mezikrok s vytvořením .jar, jeho vložením do projektu modulu, a teprve pak publikování do OpenCms).
Nevýhodou je, že když je modul odladěný na lokálním vávojářském stroji, je potřeba výsledné třídy zabalit do lib/modulname.jar
archivu a odstranit je z classes/
adresáře, aby produkční verze modulu nezahltila systém množstvím malých .class souborů.
Celý tento návod platí pro situaci, kdy Eclipse i OpenCms jsou spuštěny na stejném stroji (tj. na localhost
). Dokument vychází z verzí opencms 7.5 a Eclipse 3.4. Pro jiné verze SW by postup mohl být obdobný. Celý příklad se bude týkat vzorového modulu cz.zcu.kiv.produkty
.
Následující struktura SVN mi připadá přehlednější a dovoluje vytvořit projekt modulu s propojením na opencms i svn.
./produkty/trunk - odehrává se zde hlavní vývoj modulu a obsahuje adresáře
./produkty/trunk/module (podle potřeby mohou být i jiné adresáře, jen ne adresář classes, který je součástí buildu modulu a obsahuje zkompilovaný obsah adresáře src)
Pokud nastavíme, aby se při vytváření buildu exportoval obsah jen daných podadresářů, zajistí nám to, aby se nepotřebné soubory nezahrnuly do buildu modulu. Při nahrávání souborů z Eclipse se do OpenCms nahrávají skoro všechny soubory projektu.
Celá cesta k nastavení:
Administration View > Module Management > Edit Module > Module Resources
Admin
View => Administration
Module Management
cz.zcu.kiv.produkty
Module Resources
/system/modules/cz.zcu.kiv.produkty/
nastavit podadresáře
/system/modules/cz.zcu.kiv.produkty/classes/ /system/modules/cz.zcu.kiv.produkty/elements/ /system/modules/cz.zcu.kiv.produkty/lib/ /system/modules/cz.zcu.kiv.produkty/pages/ /system/modules/cz.zcu.kiv.produkty/resources/
U jiného modulu mohou být jiné adresáře. Hlavně součástí být adresáře src
a test
.
Podpora pro práci SVN úložišti není standardní součástí vývojového prostředí Eclipse a je nutno tuto podporu přidat. Pro přidání popdory je nutno doinstalovat Subclipse plugin. Je možno vyžít návody:
Window > Open Perspective > Other... > SVN Repository Exploring
SVN Repositories
klepnout pravým tlačítkem a vybrat New > Repository Location...
svn+ssh://forge.kiv.zcu.cz/home/svn/www-kiv
Pro Eclipse existuje plugin OpenCms Module Developer. Tento plugin umožňuje z prostředí Eclipse nahrávat změny z vyvíjeného OpenCms modulu do běžícího OpenCms.
Vytvoříme nový Eclipse projekt. Při vytváření projektu nejdříve stáhneme soubory modulu z OpenCms a pak přesto nahrajeme novou verzi souborů ze SVN.
File > New > Other... > SVN > Checkout Projects from SVN
svn+ssh://forge.kiv.zcu.cz/home/svn/www-kiv
./produkty/trunk/module
Other > OpenCms Module
Opencms Eclipse plugin dovoluje nahrávat upravené soubory modulu z Eclipse přímo do opencms. Pokud se nám podařilo dobře vytnořit nový projekt, tak pro nahrání upravených souborů do OpenCms stačí:
Communicate with OpenCms server > Copy to OpenCms server
Není potřeba, aby unit testy a další třídy pro testování, byly součástí výsledného buildu modulu. To prakticky znamená, že testy je potřeba spravovad odděleně a zkompilované testy nesmí být součástí složky classes
.
test
Properties
test
, aby se testovací třídy při změně automaticky kompilovaly.
Output folder
na test-classes
. Testovací třídy se pak nebudou kompilovat do složky classes, ale do složky test-classes.