2006年12月28日

          grails 有一個(gè) wicket 的插件:

          http://graemerocher.blogspot.com/2007/05/grails-wicket-wonders-of-grails-plug-in.html

          我試了一下,發(fā)現(xiàn)最新版本(0.3)的wicket插件,運(yùn)行helloworld都有問題,錯(cuò)誤是:

          wicket.markup.MarkupNotFoundException: Markup not found.

          查看了一下原因,按照文檔, HelloWorld.html 是放在 grails-app/views 目錄下的,但是 wicket 插件 沒有修改classpath 和 resource 裝載的路徑,也就是說,實(shí)際上這個(gè) HelloWorld.html 對(duì)于 wicket 來說 是不可見的。但是如果把這個(gè) HelloWorld.html 放在 src/java 目錄下,則可以正常運(yùn)行。
          想到了一個(gè)簡(jiǎn)單的解決方案,修改 $GRAILS_HOME/scripts/Package.groovy,在 146 行增加:
          fileset(dir:"${basedir}/grails-app/views") {
          include(name:
          "**/**")
          exclude(name:
          "**/*.groovy")
          }

          就像 src/java 當(dāng)中的資源一樣,全部拷貝到目標(biāo)目錄下,這樣的效果就和放在 src/java 目錄下一樣了。

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

          posted @ 2008-01-15 10:38 SimonLei 閱讀(1109) | 評(píng)論 (1)編輯 收藏

          首先看看我前幾天的一篇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 ' .

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

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

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

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

          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)是這樣積累起來的:在剛開始嘗試使用eclipse的時(shí)候,用的是3.0和3.1Mx系列,當(dāng)時(shí) 不知道osgi是個(gè)什么東西 :$ 創(chuàng)建的幾個(gè)插件,都沒有創(chuàng)建osgi bundle manifest。也就是說, 只有plugin.xml,而沒有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文件,是 通過 PluginConverterImpl 這個(gè)類來實(shí)現(xiàn)的,在它的 isValidPackageName 方法中,所有的 META-INF或者以META-INF開頭的目錄,都不會(huì)被自動(dòng)的export出去,從而在臨時(shí)生成的MANIFEST.MF 文件中,永遠(yuǎn)不會(huì)有META-INF目錄的export。

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

          于是,在前幾天,當(dāng)spring.jar當(dāng)中的幾個(gè)META-INF目錄下的文件訪問不了時(shí),我也認(rèn)為這個(gè)經(jīng)驗(yàn)有用, 差點(diǎn)就去改eclipse的代碼了。幸好嘗試了一下,把spring.jar所在的插件中,將META-INF目錄共享出來, 居然就好了。仔細(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 @ 2006-12-28 10:37 SimonLei 閱讀(3361) | 評(píng)論 (2)編輯 收藏

          統(tǒng)計(jì)

          主站蜘蛛池模板: 磐安县| 峨边| 阜新| 鹿邑县| 株洲县| 府谷县| 江门市| 新泰市| 岗巴县| 晴隆县| 九台市| 古田县| 南宁市| 玉溪市| 科技| 金川县| 彭阳县| 清远市| 灵川县| 安岳县| 屏山县| 平昌县| 衡东县| 河南省| 东宁县| 潞城市| 手游| 托里县| 巴南区| 盘锦市| 娱乐| 巴东县| 普兰店市| 谢通门县| 海伦市| 思南县| 巨鹿县| 肥城市| 九龙坡区| 阳泉市| 定远县|