Клиент AwsS3 выдает ошибку при инициализации - PullRequest
0 голосов
/ 30 сентября 2019

Я вижу этот сбой всякий раз, когда пытаюсь инициализировать клиента aws s3. Я пытался найти решения, но не нашел.

BasicAWSCredentials awsCreds = new BasicAWSCredentials(amazonAccessId, amazonSecretKey);
Amazon S3 s3Client = AmazonS3ClientBuilder.standard()
            .withCredentials(new AWSStaticCredentialsProvider(awsCreds))
            .withRegion(Regions.AP_SOUTH_1)
            .build();

Файл Gradle

dependencies {
      implementation platform('com.amazonaws:aws-java-sdk-bom:1.11.641')
      implementation 'com.amazonaws:aws-java-sdk-s3:1.11.641'
}

Это приводит к ошибке в строке .build (), говорящей о сбое разрешения: Ljavax / management/ MBeanServerFactory;

--------- beginning of crash
2019-09-30 17:48:02.148 20191-20191/com.tactopus.app E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.tactopus.app, PID: 20191
    java.lang.NoClassDefFoundError: Failed resolution of: Ljavax/management/MBeanServerFactory;
        at com.amazonaws.jmx.MBeans.getMBeanServer(MBeans.java:111)
        at com.amazonaws.jmx.MBeans.registerMBean(MBeans.java:50)
        at com.amazonaws.jmx.SdkMBeanRegistrySupport.registerMetricAdminMBean(SdkMBeanRegistrySupport.java:27)
        at com.amazonaws.metrics.AwsSdkMetrics.registerMetricAdminMBean(AwsSdkMetrics.java:398)
        at com.amazonaws.metrics.AwsSdkMetrics.<clinit>(AwsSdkMetrics.java:359)
        at com.amazonaws.metrics.AwsSdkMetrics.addAll(AwsSdkMetrics.java:662)
        at com.amazonaws.services.s3.AmazonS3Client.<clinit>(AmazonS3Client.java:406)
        at com.amazonaws.services.s3.AmazonS3Builder$1.apply(AmazonS3Builder.java:35)
        at com.amazonaws.services.s3.AmazonS3Builder$1.apply(AmazonS3Builder.java:32)
        at com.amazonaws.services.s3.AmazonS3ClientBuilder.build(AmazonS3ClientBuilder.java:64)
        at com.amazonaws.services.s3.AmazonS3ClientBuilder.build(AmazonS3ClientBuilder.java:28)
        at com.amazonaws.client.builder.AwsSyncClientBuilder.build(AwsSyncClientBuilder.java:46)
        at com.tactopus.app.AWS.S3DownloadAndUpdate.init(S3DownloadAndUpdate.java:98)
        at com.tactopus.app.AWS.S3DownloadAndUpdate.<init>(S3DownloadAndUpdate.java:64)
        at com.tactopus.app.presenter.BookDescriptionActivityPresenter.onClick(BookDescriptionActivityPresenter.java:46)
        at com.tactopus.app.view.BookDescriptionActivity$3.onClick(BookDescriptionActivity.java:166)
        at android.view.View.performClick(View.java:7352)
        at android.widget.TextView.performClick(TextView.java:14177)
        at android.view.View.performClickInternal(View.java:7318)
        at android.view.View.access$3200(View.java:846)
        at android.view.View$PerformClick.run(View.java:27800)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7050)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)
     Caused by: java.lang.ClassNotFoundException: Didn't find class "javax.management.MBeanServerFactory" on path: DexPathList[[zip file "/data/app/com.tactopus.app-IcaP3SsuBAnlY85tNBJ8fw==/base.apk"],nativeLibraryDirectories=[/data/app/com.tactopus.app-IcaP3SsuBAnlY85tNBJ8fw==/lib/arm64, /system/lib64, /system/vendor/lib64]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134)

Ответы [ 2 ]

0 голосов
/ 07 октября 2019

У меня тоже такая же проблема. Я собираюсь загрузить файл в Minio и использовать AmazonS3 s3Client = AmazonS3ClientBuilder .standard() .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration("http://localhost:9000", Regions.US_EAST_1.name())) .withPathStyleAccessEnabled(true) .withClientConfiguration(clientConfiguration) .withCredentials(new AWSStaticCredentialsProvider(credentials)) .build();

и показывает ту же ошибку java.lang.NoClassDefFoundError: Failed resolution of: Ljavax/management/MBeanServerFactory;

Я пытался решить эту проблему, но пока не могу ее исправить.

0 голосов
/ 02 октября 2019

У меня была эта проблема сегодня, похоже, MBeanServerFactory не является частью Java SDK AWS.

Вместо этого используйте следующие зависимости

implementation 'com.amazonaws:aws-android-sdk-core:2.6.0'
implementation 'com.amazonaws:aws-android-sdk-cognito:2.2.0'
implementation 'com.amazonaws:aws-android-sdk-s3:2.6.0'

Вы можете использовать CognitoCachingCredentialsProvider инициализировать ваш AmazonS3 клиент. Перейдите на Amazon Cognito Console , затем создайте пул удостоверений. Убедитесь, что вы предоставили правильные разрешения (вы можете проверить это, перейдя на свою панель IAM, затем на вкладке «Роли» проверьте созданный вами пул удостоверений и добавьте политику AmazonS3FullAccess).

Послевы создали Identity Pool, вы получите пример кода, который выглядит следующим образом

CognitoCachingCredentialsProvider credentialsProvider;
credentialsProvider = new CognitoCachingCredentialsProvider(
    getApplicationContext(),
    "ap-southeast-1:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", // Identity Pool ID
    Regions.AP_SOUTHEAST_1 // Region
);

Используйте этот объект credentialsProvider для инициализации вашего AmazonS3 клиента

AmazonS3 s3Client = new AmazonS3Client(credentialsProvider);
...