java - Groovy 类加载器不会加载 Java 类

标签 java groovy classloader

我在 .groovy 文件中编写了这个 groovy 脚本:

import groovy.sql.Sql;
def doit() {
    Class.forName('oracle.jdbc.driver.OracleDriver'); // If i skip this line it throws SQLException no driver registered for URL
    def db = [url:'jdbc:oracle:thin:/@localhost:1555:AVDB', user:'sys as sysdba', password:'secret',driver:'oracle.jdbc.driver.OracleDriver'];
    def sql = Sql.newInstance(db.url, db.user, db.password, db.driver) ;
    sql.execute 'CREATE USER RandomUser identified by Secret123';
}

我通过以下方式从 Java 调用上面的 Groovy:

ClassLoader parent = getClass().getClassLoader();
GroovyClassLoader loader = new GroovyClassLoader(parent);

Class groovyClass = loader.parseClass(groovySource); // groovySource is a File object pointing to .groovy file
GroovyObject groovyObject = (GroovyObject) groovyClass.newInstance();
Object[] args = {};
groovyObject.invokeMethod("doit", args);

问题:

oracle.jdbc.driver.OracleDriver存在于Java的类路径中,但groovy无法在以下行找到它:Class.forName('oracle.jdbc.driver.OracleDriver');

抛出 ClassNotFoundException。

最佳答案

在常规方法之前尝试魔法线:

@groovy.transform.CompileStatic
def doit(){....}

关于java - Groovy 类加载器不会加载 Java 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25833023/

相关文章:

java - Java 中的日期比较

java - 将对象写入输出文本文件

java - 我们应该在连接工厂上调用 setClientId() 吗?

groovy - 允许在 Jenkins/Hudson 处于关闭模式时运行一些作业

groovy - 使用 Groovy,我们如何在 Windows 中使用一个参数调用 Python 脚本

java - JMeter中解决库冲突的方法?

java - 边运行边编译类并使用

java - Java 空指针异常

rest - SOAPUI 错误 : Attempted read from closed stream for JSON POST to redirect to GET after 302

java - 将 jar 从 war 中移除