私はosgiバンドルを作成しました。ここでは、(META_inf/services /の下で)サービスプロバイダを含むjar(bsf-all.jar)の依存関係があります。私は、OSGiコンソールを経由して私のバンドル状態をチェックするとサービスプロバイダとOSGIの問題
bsh.engine.BshScriptEngineFactory
com.sun.script.freemarker.FreeMarkerScriptEngineFactory
com.sun.script.groovy.GroovyScriptEngineFactory
com.sun.script.jacl.JaclScriptEngineFactory
com.sun.script.jaskell.JaskellScriptEngineFactory
com.sun.script.java.JavaScriptEngineFactory
com.sun.phobos.script.javascript.RhinoScriptEngineFactory
com.sun.phobos.script.javascript.EmbeddedRhinoScriptEngineFactory
com.sun.script.jawk.JawkScriptEngineFactory
com.sun.script.jelly.JellyScriptEngineFactory
com.sun.script.jep.JepScriptEngineFactory
com.sun.script.jexl.JexlScriptEngineFactory
com.sun.script.jruby.JRubyScriptEngineFactory
com.sun.script.judo.JudoScriptEngineFactory
com.sun.script.juel.JuelScriptEngineFactory
com.sun.script.jython.JythonScriptEngineFactory
com.sun.script.ognl.OgnlScriptEngineFactory
org.pnuts.scriptapi.PnutsScriptEngineFactory
com.sun.script.scheme.SchemeScriptEngineFactory
com.sun.script.velocity.VelocityScriptEngineFactory
com.sun.script.xpath.XPathScriptEngineFactory
com.sun.script.xslt.XSLTScriptEngineFactory
、「 サーバがスローそれがアクティブで、何の任意の依存関係の問題.. はありませんが、私はそれを使用しようとすると、(サーバー稼働して後を意味します)クラスが見つかりません "問題。
java.lang.ClassNotFoundException: com.sun.phobos.script.javascript.RhinoScriptEngineFactory
この特定のクラスは、私の依存関係ジャー(BSF-all.jarを)であり、そのクラスは、サービスプロバイダを介して公開された。.. 私は、OSGiとJavaのサービスプロバイダとクラスローディング問題がある疑いがあります..
私のpom.xmlは次のとおりです。
<dependencies>
<dependency>
<groupId>org.apache.bsf</groupId>
<artifactId>bsf-all</artifactId>
<version>${bsf.version}</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>rhino</groupId>
<artifactId>js</artifactId>
<version>1.6R7</version>
<optional>true</optional>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<instructions>
<Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
<Bundle-Name>${project.artifactId}</Bundle-Name>
<Export-Package>
org.apache.bsf.*,
org.mozilla.javascript.*,
org.pnuts.scriptapi.*,
com.sun.script.*,
com.sun.phobos.script.*,
bsh.engine.*,
javax.script.*,
</Export-Package>
<Import-Package>
com.sun.*
</Import-Package>
<DynamicImport-Package>*</DynamicImport-Package>
<Embed-Dependency>js;scope=compile|runtime;inline=false;</Embed-Dependency>
</instructions>
</configuration>
</plugin>
</plugins>
</build>
私はEquinox OSGiの実装を使用しています。上記の問題を解決するために私のPOMを編集できますか?
はbsf-all.jarのOSGiバンドルです(意味:META-INF/MANIFEST.MFファイルを持っています)? – thobens
サービスプロバイダはOSGiでは動作しませんが、スクリプトエンジンを手動で設定することでこれらのスクリプトエンジンを使用できます。ScriptEngineFactory.registerEngineName(String name) - 一度に依存関係を取得しようとする方が良いでしょう。また、すべてを埋め込むのではなく、個々のJarとしてラップしてください(つまり、個々の依存関係をバンドルにする場合は、pax-wrapを参照してください)。 – earcam
"サービスプロバイダはOSGiでは動作しませんが、ScriptEngineFactory.registerEngineName(文字列名)を手動で設定することで、これらのスクリプトエンジンを使用できます。" ..マニュアル登録は正常に動作します。 – Ratha