2011-03-21 84 views
2

我有興趣在我的Grails項目中使用某個庫(Gremlin,圖遍歷語言)。我將必要的.jar放入[grailsproject]/lib中。但是,當我做grails run-app它給了我一個編譯錯誤重:一類「小鬼」,這是罐子(我確認它是通過運行tar tf <jarfile>.jar列入罐子,它顯示了類小鬼)的一部分:Grails無法在.jar文件中加載類

[groovyc] org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed, 
...unexpected token: Gremlin @ line 45, column 2. 
    [groovyc]  Gremlin.load() 
    [groovyc] ^

有沒有辦法「刷新」Grails,以確保它加載新的jar文件?我在獨立的groovy測試應用程序中使用完全相同的jar和相同的import語句,在那裏我可以使用Gremlin類,它工作正常。我的系統$ CLASSPATH不包含任何我沒有在[grailsproject]/lib中添加的jar文件。

任何想法?

謝謝!

更新:這是從代碼中的相關章節:

package com.mycompany.myproject 

import org.codehaus.groovy.grails.commons.ConfigurationHolder as CH 
import com.orientechnologies.common.collection.* 
import com.orientechnologies.common.* 
import com.orientechnologies.orient.core.* 
import com.tinkerpop.blueprints.* 
import com.tinkerpop.blueprints.pgm.* 
import com.tinkerpop.blueprints.pgm.impls.orientdb.* 
import com.tinkerpop.gremlin.pipes.* 
import com.tinkerpop.gremlin.Gremlin 
import com.tinkerpop.gremlin.* 


class GraphDbService { 

    boolean transactional = true  

    Gremlin.load() 

    ... 
+0

你能張貼導致錯誤的類的源代碼?或者只是相關的部分?我假設你輸入com.tinkerpop.gremlin.Gremlin? – 2011-03-21 09:52:41

+0

我添加了代碼,是的,我輸入了Gremlin以及gremlin。*好的方法 – mindthief 2011-03-21 10:17:11

+0

您使用的是哪個版本的grails? – 2011-03-21 10:52:21

回答

3

我認爲你必須把Gremlin.load()在一種方法中,不只是在您的服務級別的定義部分...

ie:

class GraphDbService { 
    boolean transactional = true  

    def someServiceMethod() { 
    Gremlin.load() 
    } 

    ... 

或者,最好,你應該可以把它放在你的BootStrap.groovy文件的init()方法,因爲它僅需要調用一次,所以它可以裝飾所有必需的類。

+0

謝謝蒂姆!將指針置於BootStrap.groovy文件中爲+1,這就是我實現的解決方案。 – mindthief 2011-03-21 10:57:00

0

我想你應該可以添加以下到grails-app/conf/BuildConfig.groovy

grails.project.dependency.resolution = { 
    //...bunch of stuff 
    dependencies { 
     // other resolved dependencies here 

     compile files('lib/gremlim.jar') 
    } 
} 
+0

嗯,似乎沒有工作..它輸出的消息警告:配置方法[運行時]在grails-app/conf/BuildConfig.groovy不存在。忽略.. '當我運行'grails run-app'時,然後提供與以前相同的編譯錯誤。 – mindthief 2011-03-21 10:23:02

+1

BuildConfig不存在!...看着你的更新,你可能只需要在Gremlim的加載周圍添加靜態{}。你現在已經在類的中間定義了它 – 2011-03-21 10:26:38

+0

當然,就是這樣。和靜態{}工作,謝謝! – mindthief 2011-03-21 10:54:44

0

不要

grails compile --refresh-dependencies