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

17

我希望简化执行调用 Oracle 数据库的 Groovy 脚本流程。如何将 ojdbc jar 添加到默认类路径中,以便我可以运行以下命令:

groovy RunScript.groovy

更好的替代方案:

groovy -cp ojdbc5.jar RunScript.groovy
5个回答

18

本文摘自Scott Davis所著的《Groovy菜谱》(Groovy Recipes),内容是有关it技术的在./groovy/lib目录自动包含JARs

  1. 在您的登录目录中创建.groovy/lib
  2. 取消注释${GROOVY_HOME}/conf/groovy-starter.conf文件中的以下行:

    load !{user.home}/.groovy/lib/*.jar

  3. 将所需的JAR文件复制到.groovy/lib

似乎自Groovy 1.5版本以后,这已经默认自带了(不需要编辑配置文件),只需将JAR文件放入/lib目录即可。


不确定是否更好。有时我宁愿使用Java的“默认类加载器”。在这种情况下,我可以将JAR文件放入jre / lib / ext中,以便自动加载到默认类加载器。 - djangofan

5

有几种方法可以实现。您可以将jar添加到系统的CLASSPATH变量中。您可以在您的主目录中创建一个名为.groovy/lib的目录,并将jar文件放入其中。它会在运行时自动添加到您的classpath中。或者,您可以在代码中实现:

this.class.classLoader.rootLoader.addURL(new URL("file:///path to file"))

只动态加载JAR文件对我来说是不起作用的,除非我也动态实例化JAR文件中的任何类。例如,如果MyClass在JAR文件中,我必须像这样构造它:def myObj = Class.forName("com.whatever.MyClass").newInstance()因此,最好将JAR文件包含在groovy-starter.conf目录的某个位置,除非有我不知道的解决方法。 - seansand

2

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

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

1

groovy 只是一个包装脚本,用于设置 Java 类路径的 Groovy JAR。你也可以修改该脚本以添加到你自己的 JAR 路径。


1

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

#!/usr/bin/env groovy -cp ojdbc5.jar

然后,将脚本标记为可执行:
chmod u+x RunScript.groovy

现在,单独运行脚本将自动设置类路径。

./RunScript.groovy

1
他的意思是要简化脚本,而不是在Groovy中移动命令参数。 - Mache

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接