2013-07-10 61 views
4

我是OSGI的初學者。我按照以下教程在eclipse中做了一個簡單的Hello World OSGI Bundle。 http://www.javaworld.com/javaworld/jw-03-2008/jw-03-osgi1.html?page=2運行Hello World OSGI Bundle的FrameworkEvent錯誤

在運行該項目時,我在控制檯中收到一堆錯誤。下面是這些錯誤:

osgi> !SESSION 2013-07-10 23:23:03.340 ----------------------------------------------- 
eclipse.buildId=unknown 
java.version=1.7.0_07 
java.vendor=Oracle Corporation 
BootLoader constants: OS=win32, ARCH=x86, WS=win32, NL=en_US 
Command-line arguments: -dev file:C:/Users/student/workspace/.metadata/.plugins/org.eclipse.pde.core/OSGi Framework/dev.properties -os win32 -ws win32 -arch x86 -consoleLog -console 

!ENTRY org.eclipse.debug.ui 4 0 2013-07-10 23:23:08.809 
!MESSAGE FrameworkEvent ERROR 
!STACK 0 
org.osgi.framework.BundleException: Exception in org.eclipse.debug.internal.ui.DebugUIPlugin.start() of bundle org.eclipse.debug.ui. 
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:734) 
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:683) 
    at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:381) 
    at org.eclipse.osgi.framework.internal.core.AbstractBundle.resume(AbstractBundle.java:390) 
    at org.eclipse.osgi.framework.internal.core.Framework.resumeBundle(Framework.java:1177) 
    at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:559) 
    at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:544) 
    at org.eclipse.osgi.framework.internal.core.StartLevelManager.incFWSL(StartLevelManager.java:457) 
    at org.eclipse.osgi.framework.internal.core.StartLevelManager.doSetStartLevel(StartLevelManager.java:243) 
    at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:438) 
    at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:1) 
    at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230) 
    at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340) 
Caused by: java.lang.IllegalStateException: Workbench has not been created yet. 
    at org.eclipse.ui.PlatformUI.getWorkbench(PlatformUI.java:92) 
    at org.eclipse.debug.internal.ui.contextlaunching.LaunchingResourceManager.startup(LaunchingResourceManager.java:546) 
    at org.eclipse.debug.internal.ui.DebugUIPlugin.getLaunchingResourceManager(DebugUIPlugin.java:357) 
    at org.eclipse.debug.internal.ui.DebugUIPlugin.start(DebugUIPlugin.java:569) 
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:711) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:702) 
    ... 12 more 
Root exception: 
java.lang.IllegalStateException: Workbench has not been created yet. 
    at org.eclipse.ui.PlatformUI.getWorkbench(PlatformUI.java:92) 
    at org.eclipse.debug.internal.ui.contextlaunching.LaunchingResourceManager.startup(LaunchingResourceManager.java:546) 
    at org.eclipse.debug.internal.ui.DebugUIPlugin.getLaunchingResourceManager(DebugUIPlugin.java:357) 
    at org.eclipse.debug.internal.ui.DebugUIPlugin.start(DebugUIPlugin.java:569) 
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:711) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:702) 
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:683) 
    at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:381) 
    at org.eclipse.osgi.framework.internal.core.AbstractBundle.resume(AbstractBundle.java:390) 
    at org.eclipse.osgi.framework.internal.core.Framework.resumeBundle(Framework.java:1177) 
    at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:559) 
    at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:544) 
    at org.eclipse.osgi.framework.internal.core.StartLevelManager.incFWSL(StartLevelManager.java:457) 
    at org.eclipse.osgi.framework.internal.core.StartLevelManager.doSetStartLevel(StartLevelManager.java:243) 
    at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:438) 
    at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:1) 
    at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230) 
    at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340) 

!ENTRY org.eclipse.equinox.p2.core 4 0 2013-07-10 23:23:10.114 
!MESSAGE Provisioning exception 
!STACK 1 
and other similar errors.... 

你能幫我解決這個問題嗎?謝謝。

+0

你確定正確執行了所有指令在第4步‘執行包’確保只有您的包和系統包'org.eclipse.osgi'被選中,取消所有其他包並運行它 – nadirsaghar

+0

是的,我這樣做了,我認爲命令在控制檯上工作正常,我嘗試了幾個,他們工作正常。 ,這些錯誤繼續顯示,我不知道我是否可以忽略它們 –

+0

我不認爲你確實這樣做了,否則爲什麼你的應用程序包含'o rg.eclipse.debug.ui'捆綁? –

回答

0

當您從目標平臺啓動一些不必要的捆綁包時發生此錯誤。所以只選擇所需的捆綁包。

簡單,在設置運行配置,遵循以下步驟:

  1. 在「包」選項卡,按取消所有第一。 這將從您的工作區以及目標平臺中取消選擇所有軟件包。
  2. 現在,在同一個選項卡中,從工作區樹結構中,選擇您自己創建的包。 之後按下「添加必需的軟件包」。 這將從目標平臺添加所需的捆綁軟件。 您也可以通過按「Validate Bundles」驗證是否滿足所有依賴關係。
  3. 現在保存配置並運行。你的包將被啓動,所有其他令人不安的包將被跳過。
+1

你的方式沒有奏效。它變得更糟,更多的錯誤,我不能寫任何命令。在目標平臺中包含所有包可以正常工作,但會顯示錯誤。你是否運用了你所說的話? –

+0

@TheTravellingSalesman你的評論和downvote是不公平的。正如Shinchan(cool name!)所建議的那樣,您應該只啓動與您的應用程序相關的捆綁包。如果它不適合你,那麼這不是他的錯......嘗試描述實際問題是什麼。 –

+0

我知道@Shinchan說的是正確的。我在教程中看到了它。但他的建議並沒有解決我的問題。它真的變得更糟。也許是因爲我正在做別的錯誤,這正是我想要理解的。雖然,也許我不應該低估他,因爲他的回答可能有助於解決其他問題。對不起,我現在無法對他表示讚賞。 –

0

我有這個完全相同的問題。我設法通過創建一個新的運行配置並取消選擇所有包,添加我的包,然後單擊添加必需的包來運行我的包。

我不知道爲什麼這第二次運行的配置工作,第一次沒有,我看過兩個.launch文件,它們是相同的。

似乎正在發生的事情是,一個運行配置運行所有可用捆綁包,即使在gui中只選擇了三個。如果在所有錯誤完成後在osgi控制檯中輸入ss命令,我會爲啓動配置文件啓動1182個捆綁包,因爲工作配置只會提供正確的3.

您應該嘗試創建一個新的啓動配置,看看是否這樣排序,我不知道爲什麼新的一個適合我,但它確實,希望這有助於。

輸出工作配置SS的:破碎配置SS的

id  State  Bundle 
0  ACTIVE  org.eclipse.osgi_3.7.2.dist 
        Fragments=1 
1  RESOLVED javax.transaction_1.1.1.v201105210645 
        Master=0 
2  ACTIVE  com.javaworld.sample.HelloWorld_1.0.0.qualifier 

最後幾行:

1040 ACTIVE  org.sonatype.m2e.mavenarchiver_0.15.0.201212080009 
1041 ACTIVE  org.testng.eclipse_6.8.0.20121120_1820 
1042 ACTIVE  org.uddi4j_2.0.5.v200805270300 
1043 ACTIVE  org.w3c.css.sac_1.3.0.v200805290154 
1044 ACTIVE  org.w3c.dom.smil_1.0.0.v200806040011 
1045 ACTIVE  org.w3c.dom.svg_1.1.0.v201011041433 
1046 ACTIVE  org.w3c.sac_1.3.0.v20120213 
1155 <<LAZY>> org.eclipse.equinox.simpleconfigurator_1.0.200.dist 
1182 <<LAZY>> org.eclipse.equinox.initializer_1.0.0.dist 
6

我遲到了,但我遇到了相同問題試圖創建來自javaworld教程的使用eclipse 4.2的Hello World。

當我取消選擇目標平臺所有的包和按下「添加所需的包」,日食只選

org.eclipse.osgi 

一旦運行,然後我得到了錯誤

org.osgi.framework.BundleException: Could not find bundle: org.eclipse.equinox.console 

添加控制檯並按下「添加必需包」

javax.servlet 
org.apache.felix.gogo.runtime 
org.eclipse.osgi.services 

連同 org.eclipse.osgi

運行此配置導致

org.osgi.framework.BundleException: Missing required bundle: org.apache.felix.gogo.shell 

最後,加入

org.apache.felix.gogo.shell 

了我我所期待的。

Hello World!! 
osgi> ss 
"Framework is launched." 


id State  Bundle 
0 ACTIVE  org.eclipse.osgi_3.9.0.v20130529-1710 
1 ACTIVE  com.javaworld.sample.HelloWorld_1.0.0.qualifier 
8 ACTIVE  org.apache.felix.gogo.runtime_0.10.0.v201209301036 
9 ACTIVE  org.eclipse.equinox.console_1.0.100.v20130429-0953 
10 ACTIVE  javax.servlet_3.0.0.v201112011016 
11 ACTIVE  org.eclipse.osgi.services_3.3.100.v20130513-1956 
12 ACTIVE  org.apache.felix.gogo.shell_0.10.0.v201212101605 
osgi> 
6

我掙扎了很多關於「工作臺還尚未創建」完整的一天。

但我得到通過以下的解決步驟 .-

  1. 轉到運行配置 - >刪除所有目標平臺罐子。
  2. 點擊添加需要的捆綁包。
  3. 檢查org.apache.felix.gogo.runtime,org.apache.felix.gogo.shell,org.eclipse.eqinox.console,org.eclipse.osgi和您的jar文件。
  4. 最後也是重要的一步。前往設置->檢查複選框「在啓動之前清除配置區域」。
  5. 現在運行OSGi應用程序。
  6. 如果它適合你,就像它適合我一樣。

感謝

+0

謝謝。這對我有效。你拯救了我的一天。 – thangdc94

+0

這應該被接受爲答案。這工作順利:) –

+0

感謝這對我工作以及。 – Buminda

0

設置機器人:targetSdkVersion =「?19解決了這個問題對我來說