2017-03-11 177 views
0

我一直在嘗試使用apache felix和osgi的一些例子。我製作了服務(服務提供商)界面並將其實施。之後,我設法創建一個jar文件,其中包含通過清單文件提供的相關信息。接下來,我需要爲消費者部分創建一個jar文件。但是,當我嘗試編譯消費者部分時,它會給出錯誤,因爲包不存在。我需要將接口導入到使用者(服務使用者)。軟件包不存在在Apache Felix OSGI

這是我的代碼(服務消費者的Activator.java)

package mtitassignmentone.serviceconsumer; 

import java.util.Scanner; 
import java.util.StringTokenizer; 

import org.osgi.framework.BundleActivator; 
import org.osgi.framework.BundleContext; 
import org.osgi.util.tracker.ServiceTracker; 

**import mtitassignmentone.serviceprovider.service.BookService;** 

public class Activator implements BundleActivator { 
    private BundleContext m_context = null; 
    private ServiceTracker m_tracker = null; 

    public void start(BundleContext context) throws Exception { 
     m_context = context; 

     // Create a service tracker to monitor dictionary services. 
     m_tracker = new ServiceTracker(m_context, m_context.createFilter(BookService.class.getName()), null); 
     m_tracker.open(); 

     BookService book= (BookService) m_tracker.getService(); 
      book.getName(); 

    } 

    public void stop(BundleContext context) { 
    } 
} 

進口mtitassignmentone.serviceprovider.service.BookService;它是編譯時拋出的錯誤。但該文件存在。如何克服這一點?

回答

2

看起來好像您的Activator.java文件在導入包時遇到了一些問題。有時會發生這種情況,當您在清單文件的末尾沒有保留空白行時,您會用它來創建服務提供者。

另一個原因是你創建的包的問題(顯然是:D)。這個問題可以通過從eclipse等IDE創建包來解決。否則,你可以從CMD做到這一點的如:

從項目的根目錄:

javac src/com/osgi/services/*.java 

要運行,假設沒有其他依賴:

java -cp ./src com.osgi.services.MyService 

(假設爲MyService有正常的主功能)。

javac命令編譯軟件包目錄中的所有.java文件。由於它們全都在同一個包/目錄中,所以它可以工作。它還會將生成的.class文件放在同一個目錄中,這可能是也可能不是您想要的。

要將它們放在不同的目錄中,請使用-d選項並提供路徑。

javac -d bin src/com/osgi/services/*.java 

然後運行:

java -cp ./bin com.osgi.services.MyService 
+1

感謝我用現在Eclipse創建包其工作 –

相關問題