Grails没有在.jar文件中加载类

时间:2011-03-21 09:26:02

标签: grails groovy jar

我有兴趣在我的Grails项目中使用某个库(Gremlin,图形遍历语言)。我把必要的.jars放到[grailsproject] / lib中。但是当我做grails run-app时,它给了我一个编译错误:一个类'Gremlin'是jar的一部分(我确认它通过运行tar tf <jarfile>.jar包含在jar中,它显示了Gremlin):

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

有没有办法“刷新”Grails以确保它加载新的jar文件?我在具有相同import语句的独立groovy测试应用程序中使用完全相同的jar,并且我能够使用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()

    ...

3 个答案:

答案 0 :(得分:3)

我认为你必须将Gremlin.load()放在方法中,而不只是在服务类的定义部分...

即:

class GraphDbService {
  boolean transactional = true    

  def someServiceMethod() {
    Gremlin.load()
  }

  ...

或者,最好,您应该能够将它放在init()文件的BootStrap.groovy方法中,因为它只需要调用一次,这样它就可以装饰所有必需的类。< / p>

答案 1 :(得分:0)

我认为您应该能够将以下内容添加到grails-app/conf/BuildConfig.groovy

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

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

答案 2 :(得分:0)

grails compile --refresh-dependencies