尝试阅读S3存储桶时,Groovy“找不到合适的类加载器”

时间:2017-11-01 20:05:19

标签: intellij-idea amazon-s3 groovy

我正在尝试使用bucketsS3访问Groovy(2.4)上的intellij idea(暂时只打印存储桶的名称),我收到错误消息。我目前的代码是:

import org.jets3t.service.impl.rest.httpclient.RestS3Service
import org.jets3t.service.model.S3Bucket
import org.jets3t.service.model.S3Object
import org.jets3t.service.security.AWSCredentials

@Grab('net.java.dev.jets3t:jets3t:0.9.0')


class s3_read {



    static void main(def args){

        String awsAccessKey = "YOUR_AWS_ACCESS_KEY";
        String awsSecretKey = "YOUR_AWS_SECRET_KEY";
        AWSCredentials awsCredentials =
                new AWSCredentials(awsAccessKey, awsSecretKey);

        RestS3Service s3Service = new RestS3Service(awsCredentials);

        S3Bucket[] myBuckets = s3Service.listAllBuckets();
        println("How many buckets to I have in S3? " + myBuckets.length);

    }


}

当我执行此代码时,我收到错误:

java.lang.ExceptionInInitializerError
Caused by: java.lang.RuntimeException: No suitable ClassLoader found for grab
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:488)
    at org.codehaus.groovy.reflection.CachedConstructor.invoke(CachedConstructor.java:83)
    at org.codehaus.groovy.runtime.callsite.ConstructorSite$ConstructorSiteNoUnwrapNoCoerce.callConstructor(ConstructorSite.java:105)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallConstructor(CallSiteArray.java:60)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:235)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:247)
    at groovy.grape.GrapeIvy.chooseClassLoader(GrapeIvy.groovy:182)
    at groovy.grape.GrapeIvy$chooseClassLoader.callCurrent(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:52)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:154)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:166)
    at groovy.grape.GrapeIvy.grab(GrapeIvy.groovy:249)
    at groovy.grape.Grape.grab(Grape.java:167)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:564)
    at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
    at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
    at org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite.invoke(StaticMetaMethodSite.java:46)
    at org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite.callStatic(StaticMetaMethodSite.java:102)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallStatic(CallSiteArray.java:56)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:194)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:214)
    at s3_read.<clinit>(s3_read.groovy)
Exception in thread "main" 

我刚开始学习并使用groovy,所以如果我的代码中有任何语法错误,我不会,如果是,那么如何解决这个问题?谁能指出我正在做的错误以及如何纠正它?

1 个答案:

答案 0 :(得分:0)

我能够通过首先执行带有@Grab命令的代码来解决这个错误并让它转到错误,因为它已经下载了jar,所以下次通过注释@Grab来运行它。更相关的答案是https://youtrack.jetbrains.com/issue/IDEA-103435#comment=27-657787