2009-10-03 15 views
5

Uno dei nostri plug-in richiede un JDK installato, non solo un JRE. Abbiamo bisogno di com.sun.javadoc e degli amici da tools.jar. Non credo che la licenza di Sun consentirà la ridistribuzione di tools.jar (che non è necessario se si dispone già di un JDK).In base a com.sun.javadoc da tools.jar (Sun JDK) in Eclipse

Sembra inoltre che in Eclipse non sia possibile specificare un JDK come dipendenza. Tutte le risposte nei newsgroup di Eclipse suggeriscono che gli utenti finali dovranno prima configurare correttamente Eclipse.

Conoscete qualche soluzione alternativa che renderà ovvia questa dipendenza agli utenti del nostro plug-in, , semplicemente utilizzando i meccanismi integrati di Eclipse per le dipendenze? Sembra che questo pacchetto non sia nemmeno valido per Import-Package nel manifest, a differenza, ad es. com.sun.jdi.

(come un work-around, attualmente siamo in grado di mettere in guardia solo su attivazione plugin che questa libreria è mancante.)

+0

Nota (http://www.nabble.com/Question-on-%22org.osgi.framework.system.packages%22-td22936822.html), in OSGi R4.2 (implementato in Equinox 3.5) abbiamo aggiunto una nuova proprietà ('org.osgi.framework.system.packages.extra') che può essere usata per aggiungere più pacchetti a quelli che il framework determina sono disponibili dalla VM, ma attualmente non esiste alcuna proprietà" exclude ". Vedi anche http://www.mail-archive.com/[email protected]/msg02719.html – VonC

+0

Vedere http://docs.codehaus.org/display/JETTY/OSGi+Tips (config.ini del Equinox framework) – VonC

+0

Appena aggiunto nella mia risposta il file di dichiarazione (config.ini del tuo frammento) per la dichiarazione 'org.osgi.framework.system.packages', come richiesto. – VonC

risposta

2

Dal Eclipse offre un ambiente OSGi, si potrebbe fare riferimento all'articolo "Exposing the boot classpath in OSGi", e provare a utilizzare :

  • una dichiarazione pacchetti di sistema
  • una dichiarazione Pacchetti estensione (frammento)
  • o delegazione di avvio

Specificando i pacchetti JDK necessari, il framework OSGI tenterà di caricarli (e fallirà se non ci sono qui).
Specificando uno specifico per JDK5 o JDK6, si potrebbe persino garantire la versione corretta del JDK.

Le specifiche OSGi permette al quadro (attraverso il suo fascio sistema) per esportare eventuali pacchetti interessati dal relativo caricatore classe principale come pacchetti di sistema utilizzando la proprietà org.osgi.framework.system.packages.
Poiché il repacking dell'hosting JDK come pacchetto non è un'opzione valida, è possibile utilizzare questa impostazione per fare in modo che il pacchetto di sistema (o il bundle con ID 0) esporti questi pacchetti.
La maggior parte delle implementazioni OSGi utilizza già questa proprietà per esportare tutti i pacchetti JDK pubblici (in base alla versione JDK rilevata). Di seguito è riportato un frammento da un file di configurazione Equinox per Java 1.6:

org.osgi.framework.system.packages = \ 
    javax.accessibility,\ 
    javax.activity,\ 
    javax.crypto,\ 
    javax.crypto.interfaces,\ 
    … 
    org.xml.sax.helpers 

Utilizzando questa proprietà, si può aggiungere pacchetti extra che saranno caricati e forniti dal quadro e che possono essere collegati ad altri fasci .

org.osgi.framework.system.packages = \ 
    javax.accessibility,\ 
    javax.activity,\ 
    … 
    org.xml.sax.helpers, \ 
    special.parent.package 

Nota: la soluzione più semplice di specificare Bundle-RequiredExecutionEnvironment è solo per il JRE, non il JDK ...


Questo tipo di configurazione devono essere parte della configurazione .ini del framework Equinox (vedere this example for Jetty e il suo config.ini).
Nel tuo caso, sarebbe dichiarato nel config.ini del tuo frammento.

+0

Grazie, sembra che vada decisamente nella giusta direzione. Ora ho bisogno di scoprire come fornire un tale frammento. Non sapresti dove dovrebbero andare i "org.osgi.framework.system.packages"? – ShiDoiSi

Problemi correlati