Java 将系统类加载器与grapes一起使用时出错

Java 将系统类加载器与grapes一起使用时出错,java,groovy,Java,Groovy,我正在用Java编写一个简单的Groovy程序,从数据库中读取一些内容: @Grab('com.oracle:ojdbc6:11.2.0.1.0') @Grab(group='org.codehaus.groovy', module='groovy-sql', version='2.4.6') import groovy.sql.Sql def db = [url: "jdbc:oracle:thin:@localhost:1521:XE", user: 'user_ks

我正在用Java编写一个简单的Groovy程序,从数据库中读取一些内容:

@Grab('com.oracle:ojdbc6:11.2.0.1.0')
@Grab(group='org.codehaus.groovy', module='groovy-sql', version='2.4.6')

import groovy.sql.Sql

def db = [url: "jdbc:oracle:thin:@localhost:1521:XE",
          user: 'user_kshitiz', password: 'a', driver: 'oracle.jdbc.driver.OracleDriver']
def sql = Sql.newInstance(db.url, db.user, db.password, db.driver)
但是,这给了我一个
java.sql.SQLException:找不到合适的驱动程序
错误。 因此,我将grapes配置为使用system classloader:

@Grapes([
        @Grab('com.oracle:ojdbc6:11.2.0.1.0'),
        @GrabConfig(systemClassLoader = true)
])
这也会导致以下错误:

Information:Groovyc: java.lang.NoSuchMethodException: org.codehaus.groovy.runtime.dgm$518.<init>(java.lang.String, org.codehaus.groovy.reflection.CachedClass, java.lang.Class, [Ljava.lang.Class;)
    at java.lang.Class.getConstructor0(Class.java:2849)
    at java.lang.Class.getConstructor(Class.java:1718)
    at org.codehaus.groovy.reflection.GeneratedMetaMethod$Proxy.createProxy(GeneratedMetaMethod.java:92)
    at org.codehaus.groovy.reflection.GeneratedMetaMethod$Proxy.proxy(GeneratedMetaMethod.java:83)
    at org.codehaus.groovy.reflection.GeneratedMetaMethod$Proxy.isValidMethod(GeneratedMetaMethod.java:68)
    at groovy.lang.MetaClassImpl.chooseMethodInternal(MetaClassImpl.java:3172)
    at groovy.lang.MetaClassImpl.chooseMethod(MetaClassImpl.java:3134)
    at groovy.lang.MetaClassImpl.getMethodWithCachingInternal(MetaClassImpl.java:1330)
    at groovy.lang.MetaClassImpl.createPojoCallSite(MetaClassImpl.java:3367)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.createPojoSite(CallSiteArray.java:132)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.createCallSite(CallSiteArray.java:166)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)
    at groovy.grape.GrapeIvy.grab(GrapeIvy.groovy:271)
    at groovy.grape.Grape.grab(Grape.java:167)
    at groovy.grape.GrabAnnotationTransformation.visit(GrabAnnotationTransformation.java:378)
    at org.codehaus.groovy.transform.ASTTransformationVisitor$3.call(ASTTransformationVisitor.java:321)
    at org.codehaus.groovy.control.CompilationUnit.applyToSourceUnits(CompilationUnit.java:931)
    at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:593)
    at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:569)
    at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:546)
    at org.jetbrains.groovy.compiler.rt.GroovyCompilerWrapper.compile(GroovyCompilerWrapper.java:58)
    at org.jetbrains.groovy.compiler.rt.DependentGroovycRunner.runGroovyc(DependentGroovycRunner.java:116)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.jetbrains.groovy.compiler.rt.GroovycRunner.intMain2(GroovycRunner.java:132)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.jetbrains.jps.incremental.groovy.InProcessGroovyc.runGroovycInThisProcess(InProcessGroovyc.java:156)
    at org.jetbrains.jps.incremental.groovy.InProcessGroovyc.access$000(InProcessGroovyc.java:51)
    at org.jetbrains.jps.incremental.groovy.InProcessGroovyc$1.call(InProcessGroovyc.java:85)
    at org.jetbrains.jps.incremental.groovy.InProcessGroovyc$1.call(InProcessGroovyc.java:82)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
信息:Groovyc:java.lang.NoSuchMethodException:org.codehaus.groovy.runtime.dgm$518(java.lang.String,org.codehaus.groovy.reflection.CachedClass,java.lang.Class,[Ljava.lang.Class;)
位于java.lang.Class.getConstructor0(Class.java:2849)
位于java.lang.Class.getConstructor(Class.java:1718)
位于org.codehaus.groovy.reflection.GeneratedMetaMethod$Proxy.createProxy(GeneratedMetaMethod.java:92)
位于org.codehaus.groovy.reflection.GeneratedMetaMethod$Proxy.Proxy(GeneratedMetaMethod.java:83)
位于org.codehaus.groovy.reflection.GeneratedMetaMethod$Proxy.isValidMethod(GeneratedMetaMethod.java:68)
在groovy.lang.MetaClassImpl.chooseMethodInternal(MetaClassImpl.java:3172)
在groovy.lang.MetaClassImpl.chooseMethod上(MetaClassImpl.java:3134)
位于groovy.lang.MetaClassImpl.getMethodWithCachingInternal(MetaClassImpl.java:1330)
位于groovy.lang.MetaClassImpl.createPojoCallSite(MetaClassImpl.java:3367)
位于org.codehaus.groovy.runtime.callsite.CallSiteArray.createPojoSite(CallSiteArray.java:132)
位于org.codehaus.groovy.runtime.callsite.CallSiteArray.createCallSite(CallSiteArray.java:166)
位于org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
位于org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
位于org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)
在groovy.grape.GrapeIvy.grab(GrapeIvy.groovy:271)
在groovy.grape.grape.grab(grape.java:167)
在groovy.grape.GrabAnnotationTransformation.visit(GrabAnnotationTransformation.java:378)
位于org.codehaus.groovy.transform.ASTTransformationVisitor$3.call(ASTTransformationVisitor.java:321)
位于org.codehaus.groovy.control.CompilationUnit.applyToSourceUnits(CompilationUnit.java:931)
位于org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:593)
位于org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:569)
位于org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:546)
位于org.jetbrains.groovy.compiler.rt.GroovyCompilerWrapper.compile(GroovyCompilerWrapper.java:58)
位于org.jetbrains.groovy.compiler.rt.DependentGroovycRunner.runGroovyc(DependentGroovycRunner.java:116)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)中
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:606)
位于org.jetbrains.groovy.compiler.rt.GroovycRunner.intMain2(GroovycRunner.java:132)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)中
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:606)
位于org.jetbrains.jps.incremental.groovy.InProcessGroovyc.runGroovycInThisProcess(InProcessGroovyc.java:156)
位于org.jetbrains.jps.incremental.groovy.InProcessGroovyc.access$000(InProcessGroovyc.java:51)
在org.jetbrains.jps.incremental.groovy.InProcessGroovyc$1.call(InProcessGroovyc.java:85)
在org.jetbrains.jps.incremental.groovy.InProcessGroovyc$1.call(InProcessGroovyc.java:82)
在java.util.concurrent.FutureTask.run(FutureTask.java:262)处
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
运行(Thread.java:745)

如何在Groovy中创建数据库连接?

好的,Oracle驱动程序在Maven Central中不可公开访问。不过,您有一些选择:

  • 访问一些包含Oracle JDBC驱动程序的非公共Maven存储库

  • 从Oracle站点手动下载Oracle JDBC驱动程序,将其导入本地Maven存储库或类似于本地artifactory的服务,并将该存储库包含在构建脚本中


  • 顺便说一句,Oracle驱动程序在Maven Central中是不可公开访问的。不过您有一些选择:

  • 访问一些包含Oracle JDBC驱动程序的非公共Maven存储库

  • 从Oracle站点手动下载Oracle JDBC驱动程序,将其导入本地Maven存储库或类似于本地artifactory的服务,并将该存储库包含在构建脚本中


  • Oracle Maven repository上提供了JDBC驱动程序。有关详细信息,请按照本文中的说明操作。

    Oracle Maven repository上提供了JDBC驱动程序。有关详细信息,请按照本文中的说明操作