2014-09-14 2 views
1

Я этот заводной скрипт, написанный в .groovy файле:Groovy класса загрузчик обыкновение загрузки класса Java

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'; 
} 

Я зову выше Groovy с Java в следующим образом:

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 присутствует в Javapath класса, но groovy не могу найти его по строке: Class.forName('oracle.jdbc.driver.OracleDriver');

Throw ClassNotFoundException.

+0

@Reimeus Да, его на пути Java classpath – VishalDevgire

+0

Как запустить код Java? что классный загрузчик вы получаете от getClass(). getClassLoader()? можете ли вы предоставить полное исключение stacktrace? –

ответ

1

попробовать волшебные строки перед заводной метода:

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

вы должны просто передать Java CL вниз в свой заводной метод:

def doit(ClassLoader cl) { 
    cl.loadClass 'oracle.jdbc.driver.OracleDriver' 
    .... 
} 

затем вызвать

ClassLoader parent = getClass().getClassLoader(); 
Object[] args = { parent }; 
groovyObject.invokeMethod("doit", args); 
Смежные вопросы