And*_*yuk 37 osgi scala equinox apache-felix
如何在Scala中编写我的包,然后将其部署到OSGI容器中?
我首先将它编译成"java"还是可以直接将scala部署到OSGI中并使用某种捆绑来识别它?
任何指针都会很棒.目前我使用Apache Felix作为我的osgi容器,但只是对通用概念的简单解释就足以让我开始.
And*_*yuk 34
感谢大家的答案,你引导我找到解决方案!我将在这里以更简单的术语为更广泛的受众描述它.
目标:scala中的代码,部署到OSGi.
使用的工具:
程序
Scala Project在Eclipse中创建新的.通过右键单击项目并选择:将项目转换为OSGi包. Configure -> Convert to Plug-in Projects...
现在,下一部分是我被卡住的地方.您看,现在我们需要将此捆绑包(我们的项目)部署到OSGi环境.但是,我们缺少必须在OSGi容器中的Scala类(或包含这些类的包),以提供我们在bundle中使用的所有Scala包API.不幸的是,找到"Scala捆绑"并不容易.在环顾四周之后,事实证明,由于某种原因,Scala bundle实际上位于Sonatype Maven Repository中.
scala-library-2.9.1.jar从Sonatype Maven存储库中的适当位置下载,并将其(通过最舒适的方式)部署到OSGi容器中.
调整你的清单文件以要求Scala包(我很确定这是一个捆绑依赖(即Require-Bundle)实际上非常安全的地方 - 毕竟,如果没有Scala,你将永远不会运行你的Scala代码!):
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Scala Hello
Bundle-SymbolicName: com.test.scala.hello
Bundle-Version: 1.0.0.qualifier
Bundle-Vendor: drozzy
Import-Package: org.osgi.framework;version="1.5.0"
Bundle-Activator: com.test.scala.hello.Activator
Require-Bundle: scala-library;bundle-version="2.9.1"
Run Code Online (Sandbox Code Playgroud)现在,您可以在Scala中编写捆绑激活器(wooho!):
//Activator.scala
package com.test.scala.hello
import java.lang.System
import org.osgi.framework.BundleActivator
import org.osgi.framework.BundleContext
class Activator extends BundleActivator {
def start(context: BundleContext) {
System.out.println("Hello world from scala!");
}
def stop(context: BundleContext){}
}
Run Code Online (Sandbox Code Playgroud)将项目作为捆绑包部署到OSGi容器,并注意"来自scala的Hello world!" 信息.
Joh*_*loo 14
作者在Scala 2010天的快速介绍视频
OSGi不关心你编写代码的语言:JVM字节码只是JVM字节码.所以:
您会注意到您的软件包依赖于Scala库.再一次,这没什么奇怪的,就像在你的Java代码中有依赖关系一样.为了解决这些依赖关系,您需要从scala-lang-osgi安装Scala库包