2009-10-05 14 views
6

Voglio creare un programma di installazione automatizzato per un plug-in Eclipse (cioè non tramite "Update Manager"). Il mio scenario è semplice: l'utente chiude Eclipse, rilascia un JAR scaricato nella cartella dropins, avvia Eclipse e il resto del processo è automatizzato.Installazione programmatica di un plug-in Eclipse da Eclipse?

Nelle versioni precedenti di Eclipse, prima dell'era di P2, Eclipse aveva (ha ancora) una classe chiamata InstallCommand che poteva essere utilizzata per installare le pluvi nella piattaforma attualmente in esecuzione.

Anche se questo funziona ancora in Eclipse 3.4 & 3.5, non si comporta in modo corretto: in particolare, i plug-in installati in questo modo non possono essere disinstallati automaticamente (non è disponibile).

JavaDoc afferma che lo InstallCommand è obsoleto e dovrebbe essere sostituito da un'alternativa P2. Tuttavia, non sono riuscito a trovare lo strumento giusto per il lavoro. C'è lo P2 director, ma è stato creato per essere eseguito come applicazione separata dalla riga di comando. È possibile richiamarlo da Eclipse ma in realtà non lo è. Ad esempio, il monitoraggio dei progressi e la segnalazione degli errori non funzionano bene.

Qualcuno sa di una buona alternativa per questo?

Grazie, Zviki

+0

Solitamente spacchettare le funzionalità ei plugin in una cartella sotto 'dropins' dovrebbe essere sufficiente per installare un plugin. Cos'altro vuoi fare? –

+1

Vero. Tuttavia, ho un plugin commerciale e sto cercando di creare un'esperienza più user friendly. La caduta nella cartella dropins potrebbe fallire. In questo caso la segnalazione degli errori è meno ovvia. Non tutti gli utenti di Eclipse sono esperti di Eclipse in grado di rintracciare il problema e risolverlo. – zvikico

+0

Se stai facendo le tue cose durante l'installazione, probabilmente stai meglio anche a fare le tue cose con l'aggiornamento. – AlBlue

risposta

1

I drop-in sembrano molto vicini a ciò che si desidera, specialmente se stanno scaricando solo i jar senza i metadati associati (ovvero i metadati dovranno essere generati automaticamente).

Si potrebbe prendere in considerazione la definizione di una seconda area dropins da gestire. Dai un'occhiata a ProfileSynchronizer in org.eclipse.equinox.p2.reconciler.dropins, in particolare il metodo createProfileChangeRequest. Mi aspetto che il comportamento di disinstallazione che non ti piace sia il risultato della proprietà IInstallableUnit.PROP_PROFILE_LOCKED_IU aggiunta.

I dropin sono riconciliati all'avvio, vedi p2.reconciler.dropins Activator.watchDropins(), puoi probabilmente fare lo stesso dal tuo bundle per guardare un'altra cartella.

+0

Grazie, non sto cercando di replicare il comportamento dei drop. Per quanto riguarda il PROFILE_LOCKED, non è qualcosa che ho fatto, quindi potrebbe essere un bug (anche se dubito che nessuno si preoccuperà di risolverlo in questa fase – zvikico

+0

Il PROFILE_LOCKED è nell'attuale codice p2, so che è lì apposta, ma non sono sicuro delle ragioni alla base di ciò –

+0

Per ora andrò per la soluzione dropins (funziona nella maggior parte dei casi), ma io può pensare a suggerimenti migliori Qualcosa come un JAR ma con un suffisso diverso (come EAR o WAR, potrebbe essere OAR per OSGi). Sarà associato ad Eclipse quindi un doppio clic invocherà Eclipse. , contiene un URL per un sito di aggiornamento o un eseguibile da richiamare nel framework corrente di OSGi Organizzerò i miei pensieri e aprirò un problema per suggerirlo – zvikico

0

mi suggeriscono di implementare il plugin come un JAR eseguibile. L'installer nel JAR dovrebbe richiedere la directory di installazione di Eclipse e decomprimere il plug-in nel posto giusto (più alcuni ulteriori controlli, se necessario).

Includere facoltativamente un piccolo plug-in "watchdog" che non dipende da molto e controlla solo che il plugin principale venga caricato correttamente e visualizzi un messaggio di errore utile che l'utente può inviare via email all'utente per il supporto.

+0

È una buona opzione, l'ho considerato anch'io. Tuttavia, sarà comunque necessario eseguire un'azione di provisioning sulla piattaforma di destinazione. Non dovresti assumere una struttura di directory standard per plug-in/caratteristiche, ma piuttosto permetti a P2 di gestire l'installazione. Questo ti riporta al punto di partenza ... Come? – zvikico

+0

Chiedere al gruppo di notizie p2 e/o aprire un bug contro il P2 director? –

+1

È un possibile miglioramento per il director P2. Potrei suggerirlo. Per quanto riguarda il gruppo P2: mi piace molto StackOverflow molto meglio e di solito ottengo più risposte qui poi lì. La maggior parte delle domande che ho posto nei newsgroup di Eclipse sono rimaste intatte. – zvikico

0

In base alle informazioni nel bug 311590 1 a cui si fa riferimento nel commento di deprecazione di InstallCommand, un'alternativa è possibile utilizzare le operazioni P2 2, 3.