2016-05-31 75 views
5

Sto cercando di utilizzare ScriptEngineManager e ScriptEngine per eseguire codice JavaScript con Java. Io uso Java 8 Sto eseguendo questo codice sotto Karaf OSGi.ScriptEngineManager e ScriptEngine non possono essere caricati in Karaf OSGi (Nashorn non trovato)

L'esempio che ho usato funziona bene in un campione di Java di classe, ma di imballaggio in un fascio mi dà questo errore ScriptEngineManager providers.next(): javax.script.ScriptEngineFactory: Provider jdk.nashorn.api.scripting.NashornScriptEngineFactory not found

Quando guardo alle intestazioni del fascio, vedo che le importazioni fascio javax.script, il pacchetto delle classi chiamate ma sembra che (nashorn) il provider non sia stato trovato.

Grazie

risposta

6

andare su File etc/config.properties (che si trova all'interno di installazione Karaf), trovare proprietà di configurazione org.osgi.framework.bootdelegation e aggiungere jdk.nashorn. * Ad esso. Configurazione completa sarà simile a questo:

org.osgi.framework.bootdelegation=org.apache.karaf.jaas.boot,org.apache.karaf.jaas.boot.principal,sun.*,com.sun.*,javax.transaction,javax.transaction.*,javax.xml.crypto,javax.xml.crypto.*,org.apache.xerces.jaxp.datatype,org.apache.xerces.stax,org.apache.xerces.parsers,org.apache.xerces.jaxp,org.apache.xerces.jaxp.validation,org.apache.xerces.dom,sun.*,jdk.nashorn.* 

Bug è segnalato per comunità Karaf.

Edit: se si utilizza Pax 4.x esame Contenitore per Karaf nei test poi non dimenticare di aggiungere org.ops4j.pax.exam.CoreOptions.bootDelegationPackage("jdk.nashorn.*") alla configurazione del vostro contenitore di prova.

0

Avrai bisogno di assicurarsi di avere un pacchetto o il sistema per esportare in realtà questi pacchetti in questione:

Quindi installare il relativo fascio, o è necessario modificare sulle esportazioni del bundle di sistema, in quel caso modifica jre.properties e assicurati che il pacchetto in questione sia esportato dal bundle di sistema.