Ответ 1
Спасибо всем за ответы, вы привели меня к решению! Я опишу его здесь в несколько более простых выражениях для более широкой аудитории.
Цель: код в scala, развертывание в OSGi.
Используемые инструменты:
- Внедрение Equinox OSGi
- Eclipse Helios 3.6,
- Scala 2.9
Процедура
- Установите Scala IDE для Eclipse. Найдите версию, которая будет работать с Scala 2.9 и Eclipse 3.6
- Создайте новый
Scala Project
в Eclipse. -
Преобразуйте проект в пакет OSGi, щелкнув его правой кнопкой мыши и выбрав:
Configure -> Convert to Plug-in Projects...
Теперь, следующая часть была там, где я застрял. Понимаете, теперь нам нужно развернуть этот пакет (наш проект) в среде OSGi. Однако нам не хватает классов Scala (или пакет, который содержит эти классы), которые должны быть в контейнере OSGi, чтобы предоставить все API-интерфейсы Scala, которые мы используем в нашем комплекте. К сожалению, найти "Scala bundle" не так просто. После просмотра получается, что по какой-то причине пакет Scala на самом деле находится в хранилище Sonatype Maven.
-
Загрузите
scala-library-2.9.1.jar
из соответствующего места в хранилище Sonatype Maven Repository и разверните его (наиболее удобным для вас способом) контейнером 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"
-
Теперь вы можете написать активатор пучка в 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){} }
-
Разверните свой проект как пакет в контейнер OSGi и обратите внимание на "Hello world from Scala!". сообщение.