Liferay consente di creare diverse tipologie di plugin (portlet, hook, theme, ...) e ciascuna di queste possiede la propria specifica cartella all'interno del SDK.
Esiste però una tipologia di plugin, che non produce un WAR da deployare, ma che è estremamente utile perchè consente di creare delle vere e proprie librerie distribuibili e riusabili: si tratta del plugin di tipo shared e vediamo quindi come crearlo ed utilizzarlo.
Innanzitutto occorre precisare che, al momento in cui scrivo questo post, Liferay IDE (ossia il plugin Eclipse per supportare lo sviluppo) non fornisce alcun supporto alla creazione di plugin shared, pertanto occorre fare tutto a mano.
Come prima cosa avviamo Eclipse e creiamo un nuovo Java Project:
- il nome del progetto dovrà avere per convenzione suffisso
-shared
, ad esempiomy-libray-shared
; - la cartella in cui creare il progetto dovrà essere la cartella
shared
del SDK di Liferay; - aggiungiamo la cartella
src
dei sorgenti e quellalib
per le eventuali librerie; - suggerisco di chiamare
classes
la cartella dei compilati anzichèbin
.
Una volta che il progetto sarà creato all'interno di Eclipse, creiamo al suo interno il file Ant build.xml
con il seguente contenuto:
<?xml version="1.0"?> <!DOCTYPE project> <project name="my-library-shared" basedir="." default="deploy"> <property name="plugin.version" value="1" /> <import file="../build-common-shared.xml" /> </project>
Fatto questo, apriamo il file build.xml
nella vista Ant di Eclipse e lanciamo il target Ant setup-eclipse
che provvederà a configurare tutte le dipendenze del progetto Java; alcune di queste dipendenze (portal-service.jar
, util-bridges.jar
, util-java.jar
, util-taglib.jar
) sono specifiche dell'application server e non verranno risolte ma se state utilizzando Tomcat le potete trovare nella cartella webapps/ROOT/WEB-INF/lib
.
La configurazione del plugin shared è terminata, ora possiamo scrivere le classi che ci servono al suo interno.
Ok, ma come possiamo utilizzarlo? E' sufficiente inserire all'interno del file build.xml
di ogni plugin custom in cui serve la dipendenza (tipicamente portlet), la seguente proprietà che contiene l'elenco (separato da virgola) di tutti i plugin shared necessari:
<property name="import.shared" value="my-libray-shared" />
A questo punto, ogni volta che verrà lanciato il target Ant compile
del plugin custom, il SDK creerà automaticamente il JAR del plugin shared e lo includerà staticamente tra le dipendenze. Attenzione che non parliamo della compilazione automatica di Eclipse ma del solo target Ant compile
del SDK.
In alternativa è anche possibile utilizzare il target compile-import-shared
che si occuperà semplicemente di fare il JAR del plugin shared, senza ricompilare tutto il plugin custom che lo utilizza.