2012-09-10 10 views
6

Sto usando diversi jar nei miei portlet, ad esempio c3p0. Ora voglio evitare di mettere i barattoli in tutte le mie cartelle lib di portlet. Come posso condividere un file jar in più portlet? E come dovrei integrarli nell'IDE di Eclipse? Aggiungi un barattolo esterno o inseriscili in un progetto dedicato e includili da lì?Come condividere il jar all'interno di più portlet?

+0

Ciao Strauberry, potrei avere una soluzione per te che risolverà il tuo cambiamento di JAR un grosso problema. Ho avuto la stessa identica situazione! – Jonny

risposta

6

Un'altra soluzione potrebbe essere quella di metterli sotto ../liferay-portal-<version>/tomcat-<version>/webapps/ROOT/WEB-INF/lib

Se si inseriscono qui è possibile aggiungere il JAR come una dipendenza per il portlet nelle portlet liferay-plugin-package.properties (se si sta usando Liferay Developer Studio o Liferay IDE allora c'è una bella interfaccia grafica per questo).

Poi sulla distribuzione Liferay copierà i barattoli richiesti da ROOT/WEB-INF/lib ai portlet WEB-INF/lib

Questo credo sia il meccanismo di sostegno Liferay per farlo, e non richiede un riavvio perché i JAR vengono copiati i portlet classpath sulla distribuzione.

+0

Ciao Jonny, sembra fantastico! Ho solo una domanda: dove posiziono i file jar sul mio computer durante lo sviluppo? Nei miei file jar ci sono file di classe che voglio usare i metodi da (ovviamente haha). Li aggiungo come "jar esterni" al mio progetto, quindi il compilatore Java è in grado di accedervi? – strauberry

+0

Li posizionerei dove meglio ti si addice, ne ho uno sotto una cartella util/additional-libs nel mio Liferay Plugins-SDK. Ho anche un file di build di form per ognuno che compila, JAR, e quindi copia il JAR su ROOT/WEB-INF/lib. Pertanto, quando il portlet viene ridistribuito, il JAR aggiornato è già nel posto giusto per essere copiato nel portlet. Comunque se non stai usando Liferay IDE, sì aggiungili come JAR esterni nella sezione "Configura percorso di build" ... e verifica Liferay IDE perché raccoglierà automaticamente i JAR! :) – Jonny

2

Un modo per pensare è quello di metterli tutti nel percorso globale.

Ad es. in Tomcat è possibile posizionarli su ../liferay-portal-<version>/tomcat-<version>/lib/ext e quindi quando si configura la libreria runtime del server in eclissi si avranno questi jar nel percorso di generazione.

Questo link può anche aiutare a decidere, ma parla per *-service.jar ma non sono sicuro che avrebbe funzionato altri vasi in qualsiasi portlet.

+0

Grazie per la risposta! C'è un modo per usare l'interfaccia del browser per distribuirlo? Sto cambiando il barattolo comunemente usato molto spesso al momento (sviluppo pesante), quindi un copia e incolla manuale e il riavvio sarebbero molto appetitosi ... – strauberry

+0

i vasi che vanno nel percorso globale della classe richiedono un riavvio del server per essere caricati. Non so in alcun altro modo per raggiungere il tuo requisito. Sebbene ci siano strumenti che aiutano a caricare i barattoli anche senza il riavvio del server, puoi provare a cercarli. –

+3

Il vantaggio di metterli su tomcat/lib/ext è che tutte le app web condivideranno gli stessi gheri, caricati dallo stesso caricatore di classe. Se si passano istanze di classi tra applicazioni Web (ad esempio tramite sessione), è possibile eseguire ClassCastExceptions se ciascuna applicazione Web ha le proprie copie. Il vantaggio nell'usare lib/ext è che il riavvio del server è necessario per distribuire nuove versioni dei jar. –