<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    首先看看我前幾天的一篇blog

    spring 與 osgi的第一個(gè)障礙

    eclipse3.1, spring2.0.1,將spring.jar放到一個(gè)插件中,在另一個(gè)插件中去使用。 最簡(jiǎn)單的例子,在context.getBean的時(shí)候就報(bào)了一個(gè)異常:

    Caused?by:?org.xml.sax.SAXParseException:?cvc - elt. 1 :?Cannot?find?the?declaration?of?element? ' beans ' .

    先是搜了一遍,沒(méi)有發(fā)現(xiàn)很有幫助的內(nèi)容。然后跟了一下,發(fā)現(xiàn)還是因?yàn)閤sd的映射找不到。而造成這個(gè)問(wèn)題的原因, 是在 spring.jar當(dāng)中的META-INF/spring.schemas 這個(gè)找不到。

    而這個(gè)找不到的最根本原因,是因?yàn)樵趀clipse當(dāng)中,META-INF目錄是不能夠被其他插件找到的。也就是說(shuō),META-INF 目錄是擁有spring.jar的那個(gè)插件所獨(dú)占的,而其他插件就算依賴于這個(gè)插件,也是無(wú)法找到META-INF目錄下的文件, 從而拋出這個(gè)異常。

    解決問(wèn)題的辦法有幾個(gè),最簡(jiǎn)單的莫過(guò)于拷貝spring.schemas文件到需要的插件中,另一個(gè)辦法是把spring的context 裝載就放在spring.jar所在的插件中,或者改eclipse的代碼。 :(

    這個(gè)問(wèn)題解決之后,緊接著第二個(gè)問(wèn)題就是

    Unable?to?locate?NamespaceHandler? for ?namespace?http: // www.springframework.org/schema/aop

    造成這個(gè)的原因和第一個(gè)類似,將spring.handlers拷貝到META-INF目錄下就ok了。

    上面是我以前的一個(gè)經(jīng)驗(yàn),今天仔細(xì)研究了一下,發(fā)現(xiàn)自己掉進(jìn)了 經(jīng)驗(yàn)主義的圈套。

    這個(gè)經(jīng)驗(yàn)是這樣積累起來(lái)的:在剛開(kāi)始嘗試使用eclipse的時(shí)候,用的是3.0和3.1Mx系列,當(dāng)時(shí) 不知道osgi是個(gè)什么東西 :$ 創(chuàng)建的幾個(gè)插件,都沒(méi)有創(chuàng)建osgi bundle manifest。也就是說(shuō), 只有plugin.xml,而沒(méi)有META-INF/MANIFEST.MF文件的。但是在運(yùn)行期,eclipse會(huì)自動(dòng)的 從plugin.xml當(dāng)中讀取信息,生成臨時(shí)的MANIFEST.MF文件,放在 runtime的 configuration/org.eclipse.osgi/manifests 目錄下。而生成這個(gè)MANIFEST.MF文件,是 通過(guò) PluginConverterImpl 這個(gè)類來(lái)實(shí)現(xiàn)的,在它的 isValidPackageName 方法中,所有的 META-INF或者以META-INF開(kāi)頭的目錄,都不會(huì)被自動(dòng)的export出去,從而在臨時(shí)生成的MANIFEST.MF 文件中,永遠(yuǎn)不會(huì)有META-INF目錄的export。

    當(dāng)時(shí)剛開(kāi)始接觸eclipse和osgi,根本不知道自己當(dāng)時(shí)最佳的解決方案就是創(chuàng)建一個(gè) bundle manifest, 然后在其中將META-INF目錄export出來(lái)。而是通過(guò)盲目的修改代碼來(lái)繞過(guò)這個(gè)彎。后來(lái)這個(gè)彎繞過(guò)去了, 留給我的經(jīng)驗(yàn)就是:META-INF這個(gè)目錄,是插件獨(dú)享的,別的插件不允許訪問(wèn)的。

    于是,在前幾天,當(dāng)spring.jar當(dāng)中的幾個(gè)META-INF目錄下的文件訪問(wèn)不了時(shí),我也認(rèn)為這個(gè)經(jīng)驗(yàn)有用, 差點(diǎn)就去改eclipse的代碼了。幸好嘗試了一下,把spring.jar所在的插件中,將META-INF目錄共享出來(lái), 居然就好了。仔細(xì)查了一下,發(fā)現(xiàn)屏蔽META-INF的代碼只出現(xiàn)在PluginConverterImpl這個(gè)類當(dāng)中。 回頭想了想,終于明白自己這次是掉在經(jīng)驗(yàn)主義的坑里面了。

    經(jīng)驗(yàn)主義害死人啊。唉。

    主站: http://blogsite.3322.org/

    posted on 2006-12-28 10:37 SimonLei 閱讀(3352) 評(píng)論(2)  編輯  收藏
    評(píng)論
    • # re: 經(jīng)驗(yàn)主義害死人啊(spring與osgi結(jié)合當(dāng)中遇到的問(wèn)題)
      Alexis
      Posted @ 2011-12-27 18:39
      "把spring.jar所在的插件中,將META-INF目錄共享出來(lái), 居然就好了。" 這句我沒(méi)明白,請(qǐng)問(wèn)如何將META-INF目錄共享出來(lái)?Export-Package不能導(dǎo)出META-INF目錄啊。  回復(fù)  更多評(píng)論   
    • # re: 經(jīng)驗(yàn)主義害死人啊(spring與osgi結(jié)合當(dāng)中遇到的問(wèn)題)
      SimonLei
      Posted @ 2011-12-28 13:31
      已經(jīng)記不太清楚了,似乎是直接修改 MANIFEST.MF 或者 plugin.xml 文件  回復(fù)  更多評(píng)論   

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     

    統(tǒng)計(jì)

    主站蜘蛛池模板: 亚洲精品国产suv一区88| 亚洲AV无码一区二区三区人| 国产成人3p视频免费观看| 免费大片在线观看网站| 亚洲精品中文字幕乱码三区| 亚洲免费在线播放| 亚洲AV无码一区二区三区电影 | 亚洲Av无码乱码在线观看性色| 亚洲午夜无码片在线观看影院猛| 亚洲人成电影在线天堂| 国产午夜精品久久久久免费视 | 亚洲熟妇无码另类久久久| 亚洲国产精品成人久久久| 一级特黄色毛片免费看| 永久黄色免费网站| 麻豆国产入口在线观看免费| 亚洲伊人色欲综合网| a级毛片免费全部播放无码| 国产在线观看免费完整版中文版 | 黑人粗长大战亚洲女2021国产精品成人免费视频 | a毛片在线还看免费网站| 亚洲国产精品无码中文字| jizzjizz亚洲日本少妇| 猫咪免费人成网站在线观看| 亚洲成_人网站图片| 中文字幕手机在线免费看电影| 99精品全国免费观看视频| 久久香蕉国产线看观看亚洲片| 自拍偷自拍亚洲精品偷一| 亚洲国产高清在线一区二区三区| 国产福利免费视频| 免费在线观看视频a| 日韩免费的视频在线观看香蕉| 亚洲中文字幕无码永久在线| 亚洲欧美国产国产综合一区| 国产免费久久精品99re丫y| 亚洲精品自产拍在线观看动漫| 无码永久免费AV网站| 牛牛在线精品观看免费正| 国产伦精品一区二区三区免费迷| 亚洲AV成人无码天堂|