2017-11-24 5 views
1

Ich bin nicht ganz ein Neuling zu OSGi, aber anscheinend Neuling genug.Wie OSGiScriptEngineManager läuft

Was ich tun möchte, ist ein OSGi (Apache Felix) -Bundle schreiben und verwenden Sie die Java Scripting API (JSR-223) mit zum Beispiel Groovy. Dafür habe ich groovy 2.4.12 installiert, welches bereits ein OSGi-Bundle ist, und ich sehe die Groovy Runtime (2.4.12) als aktiven Dienst in Felix 'Remote Shell Console.

Ich verstehe auch den Konflikt zwischen Java ServiceLoader API und OSGi-Bundles. Diese Is OSGi fundamentally incompatible with JSR-223 Scripting Language Discovery? verweist auf einen Blog, der besagt, dass Felix bereits einen Workaround gefunden hat.

Alles gut. Aber dann. Was muss ich importieren, um dieses OSGiScriptEngineManager-Sniplet zu verwenden?

Antwort

1

Wenn Sie Maven verwenden, so etwas wie dies funktionieren könnte:

<dependency> 
    <groupId>org.apache.felix</groupId> 
    <artifactId>org.apache.felix.mishell</artifactId> 
    <version>1.0.0</version> 
</dependency> 

Aber ich denke, dass dieses Paket nie veröffentlicht wurde, wahrscheinlich ein totes Projekt. Nun, Sie können versuchen, es selbst zu kompilieren von https://github.com/Dexels/apachecon/tree/master/org.apache.felix.mishell

Ich versuche, ServiceLoaders zu vermeiden, und wenn Sie sagen, dass sie Groovy als OSGi Service anbieten, dann sollten Sie das wirklich verwenden.

Wenn Sie nur Groovy verwenden möchten, empfehle ich dies:

import org.codehaus.groovy.jsr223.GroovyScriptEngineFactory; 
import javax.script.ScriptEngine; 

public class Test { 

    public static void main(String[] args) { 
     ScriptEngine e = new GroovyScriptEngineFactory().getScriptEngine(); 
    } 
}