Java 如何在Groovy中自动加载数据库jar而不使用-cp开关?

Java 如何在Groovy中自动加载数据库jar而不使用-cp开关?,java,scripting,groovy,classpath,Java,Scripting,Groovy,Classpath,我想简化对调用Oracle数据库的Groovy脚本的执行。如何将ojdbc jar添加到默认类路径,以便运行: groovy RunScript.groovy 而不是: groovy -cp ojdbc5.jar RunScript.groovy groovy只是groovyjar的包装脚本,用于设置Java类路径。我想,您也可以修改该脚本,将路径添加到自己的JAR中。有几种方法可以做到这一点。您可以将jar添加到系统的CLASSPATH变量中。您可以在主目录中创建一个名为.groovy/l

我想简化对调用Oracle数据库的Groovy脚本的执行。如何将ojdbc jar添加到默认类路径,以便运行:

groovy RunScript.groovy
而不是:

groovy -cp ojdbc5.jar RunScript.groovy

groovy
只是groovyjar的包装脚本,用于设置Java类路径。我想,您也可以修改该脚本,将路径添加到自己的JAR中。

有几种方法可以做到这一点。您可以将jar添加到系统的CLASSPATH变量中。您可以在主目录中创建一个名为.groovy/lib的目录,并将jar放在其中。它将在运行时自动添加到类路径中。或者,您可以在代码中执行此操作:

this.class.classLoader.rootLoader.addURL(new URL("file:///path to file"))
根据Scott Davis的Groovy Recipes总结,自动将JAR包含在./Groovy/lib目录中

  • 在登录目录中创建
    .groovy/lib
  • 取消对${GROOVY_HOME}/conf/GROOVY-starter.conf中的以下行的注释

    加载!{user.home}/.groovy/lib/*.jar

  • 将要包含的JAR复制到
    .groovy/lib


  • 对于Groovy 1.5或更高版本,默认情况下(无需编辑conf),只需将jar放在/lib目录中。

    您可以将以下内容添加到Groovy脚本的第一行:

    #!/usr/bin/env groovy -cp ojdbc5.jar
    
    然后,将脚本标记为可执行:

    chmod u+x RunScript.groovy
    
    现在,单独运行脚本将自动设置类路径

    ./RunScript.groovy
    

    一种方法是在代码中使用@Grab:

        @GrabConfig(systemClassLoader=true)
        @Grab('com.oracle:ojdbc6:12.1.0.2.0')
        Class.forName("oracle.jdbc.OracleDriver").newInstance()
    

    动态加载JAR对我来说不起作用,除非我还动态地实例化JAR中的任何类。例如,如果MyClass在JAR中,我必须这样构造它:def myObj=Class.forName(“com.whater.MyClass”).newInstance(),因此,最好只将JAR文件包含在groovy-starter.conf目录中的某个位置,除非有一种方法我不知道。不过,我不确定这是否是首选方法。有时我宁愿使用java的“默认类加载器”。在这种情况下,我可以将jar放入jre/lib/ext,自动加载到默认的类加载器中