Jetified-aws-android-sdk和jetified-aws-java-sdk中的重复类 [英] Duplicate classes from jetified-aws-android-sdk and jetified-aws-java-sdk

查看:152
本文介绍了Jetified-aws-android-sdk和jetified-aws-java-sdk中的重复类的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个Android应用程序,该应用程序明确使用最新版本(v2.15.+)的Amazon AWS库,但它也依赖于一个似乎庞大的库(netcdf4),该库似乎是自己的(旧的))复制(v1.11.236)亚马逊的非Android Java库,并在构建时导致重复类"错误.

I have an Android app that explicitly uses the latest (v2.15.+) version of Amazon's AWS library, but it also has a dependency on an ungodly huge library (netcdf4) that appears to be pulling in its own (old) copy (v1.11.236) of Amazon's non-Android Java library and causing "Duplicate class" errors when building.

我知道我需要以某种方式修改build.gradle,以便它仅将旧版本(v1.11.236)用于实现实现组:'edu.ucar',名称:'netcdf4',版本:'4.6.11',但是使用 new (v2.15.+)版本进行其他操作...但是我不确定如何实际 做到 .

I know I need to somehow modify build.gradle so it uses the old (v1.11.236) version only for things pulled in by implementation group: 'edu.ucar', name: 'netcdf4', version: '4.6.11', but uses the new (v2.15.+) version for everything else... but I'm not sure how to actually do that.

受到另一个问题答案的启发,我尝试将以下内容添加到"android {}"块的末尾(以希望它能毫不客气地剥离非Android .jars并允许所有内容进行编译而不会出错).

Inspired by the answer to another question, I tried adding the following to the end of the "android{}" block (in the hope that it would unceremoniously strip out the non-Android .jars and allow everything to compile without errors).

applicationVariants.all { variant ->
    variant.getRuntimeConfiguration().exclude group: 'com.amazonaws', module: 'aws-java-sdk-core'
}

...不幸的是,这导致Gradle同步失败:

... unfortunately, it caused the Gradle sync to fail:

ERROR: Unable to resolve dependency for ':app@debug/compileClasspath': Could not resolve org.apache.httpcomponents:httpclient:4.5.1.
Show Details
Affected Modules: app

我当前的build.gradle文件:

apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services'

android {
    compileSdkVersion 29
    buildToolsVersion "29.0.1"

    defaultConfig {
        applicationId "pantherkitty.launchspotter"
        minSdkVersion 21
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

    packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
    }

}

repositories {
    mavenCentral()
    maven {
        url "https://artifacts.unidata.ucar.edu/repository/unidata-all/"
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'com.google.android.gms:play-services-maps:17.0.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
    implementation 'com.orhanobut:logger:2.2.0'

    implementation 'com.amazonaws:aws-android-sdk-s3:2.15.+'
    implementation ('com.amazonaws:aws-android-sdk-mobile-client:2.15.+@aar') { transitive = true }
    implementation ('com.amazonaws:aws-android-sdk-auth-userpools:2.15.+@aar') { transitive = true }

    implementation group: 'edu.ucar', name: 'netcdf4', version: '4.6.11'

}

...和错误:

Executing tasks: [:app:assembleDebug] in project C:\src\Android\launchspotter

> Task :app:preBuild UP-TO-DATE
(...snip...)
> Task :app:checkDebugDuplicateClasses FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:checkDebugDuplicateClasses'.
> 1 exception was raised by workers:
  java.lang.RuntimeException: Duplicate class com.amazonaws.AbortedException found in modules jetified-aws-android-sdk-core-2.15.2.jar (com.amazonaws:aws-android-sdk-core:2.15.2) and jetified-aws-java-sdk-core-1.11.236.jar (com.amazonaws:aws-java-sdk-core:1.11.236)
  Duplicate class com.amazonaws.AmazonClientException found in modules jetified-aws-android-sdk-core-2.15.2.jar (com.amazonaws:aws-android-sdk-core:2.15.2) and jetified-aws-java-sdk-core-1.11.236.jar (com.amazonaws:aws-java-sdk-core:1.11.236)
  Duplicate class com.amazonaws.AmazonServiceException found in modules jetified-aws-android-sdk-core-2.15.2.jar (com.amazonaws:aws-android-sdk-core:2.15.2) and jetified-aws-java-sdk-core-1.11.236.jar (com.amazonaws:aws-java-sdk-core:1.11.236)
  Duplicate class com.amazonaws.AmazonServiceException$ErrorType found in modules jetified-aws-android-sdk-core-2.15.2.jar (com.amazonaws:aws-android-sdk-core:2.15.2) and jetified-aws-java-sdk-core-1.11.236.jar (com.amazonaws:aws-java-sdk-core:1.11.236)
  Duplicate class com.amazonaws.AmazonWebServiceClient found in modules jetified-aws-android-sdk-core-2.15.2.jar (com.amazonaws:aws-android-sdk-core:2.15.2) and jetified-aws-java-sdk-core-1.11.236.jar (com.amazonaws:aws-java-sdk-core:1.11.236)
(...snip...)
  Duplicate class com.amazonaws.services.kms.AWSKMS found in modules jetified-aws-android-sdk-kms-2.15.2.jar (com.amazonaws:aws-android-sdk-kms:2.15.2) and jetified-aws-java-sdk-kms-1.11.236.jar (com.amazonaws:aws-java-sdk-kms:1.11.236)
  Duplicate class com.amazonaws.services.kms.AWSKMSClient found in modules jetified-aws-android-sdk-kms-2.15.2.jar (com.amazonaws:aws-android-sdk-kms:2.15.2) and jetified-aws-java-sdk-kms-1.11.236.jar (com.amazonaws:aws-java-sdk-kms:1.11.236)
(...snip...)
  Duplicate class com.amazonaws.services.s3.AmazonS3 found in modules jetified-aws-android-sdk-s3-2.15.2.jar (com.amazonaws:aws-android-sdk-s3:2.15.2) and jetified-aws-java-sdk-s3-1.11.236.jar (com.amazonaws:aws-java-sdk-s3:1.11.236)
  Duplicate class com.amazonaws.services.s3.AmazonS3Client found in modules jetified-aws-android-sdk-s3-2.15.2.jar (com.amazonaws:aws-android-sdk-s3:2.15.2) and jetified-aws-java-sdk-s3-1.11.236.jar (com.amazonaws:aws-java-sdk-s3:1.11.236)
  Duplicate class com.amazonaws.services.s3.AmazonS3Client$1 found in modules jetified-aws-android-sdk-s3-2.15.2.jar (com.amazonaws:aws-android-sdk-s3:2.15.2) and jetified-aws-java-sdk-s3-1.11.236.jar (com.amazonaws:aws-java-sdk-s3:1.11.236)
  Duplicate class com.amazonaws.services.s3.AmazonS3Client$2 found in modules jetified-aws-android-sdk-s3-2.15.2.jar (com.amazonaws:aws-android-sdk-s3:2.15.2) and jetified-aws-java-sdk-s3-1.11.236.jar (com.amazonaws:aws-java-sdk-s3:1.11.236)
  Duplicate class com.amazonaws.services.s3.AmazonS3Encryption found in modules jetified-aws-android-sdk-s3-2.15.2.jar (com.amazonaws:aws-android-sdk-s3:2.15.2) and jetified-aws-java-sdk-s3-1.11.236.jar (com.amazonaws:aws-java-sdk-s3:1.11.236)
(...snip...)
  Duplicate class com.amazonaws.util.TimingInfoFullSupport found in modules jetified-aws-android-sdk-core-2.15.2.jar (com.amazonaws:aws-android-sdk-core:2.15.2) and jetified-aws-java-sdk-core-1.11.236.jar (com.amazonaws:aws-java-sdk-core:1.11.236)
  Duplicate class com.amazonaws.util.TimingInfoUnmodifiable found in modules jetified-aws-android-sdk-core-2.15.2.jar (com.amazonaws:aws-android-sdk-core:2.15.2) and jetified-aws-java-sdk-core-1.11.236.jar (com.amazonaws:aws-java-sdk-core:1.11.236)
  Duplicate class com.amazonaws.util.ValidationUtils found in modules jetified-aws-android-sdk-core-2.15.2.jar (com.amazonaws:aws-android-sdk-core:2.15.2) and jetified-aws-java-sdk-core-1.11.236.jar (com.amazonaws:aws-java-sdk-core:1.11.236)
  Duplicate class com.amazonaws.util.VersionInfoUtils found in modules jetified-aws-android-sdk-core-2.15.2.jar (com.amazonaws:aws-android-sdk-core:2.15.2) and jetified-aws-java-sdk-core-1.11.236.jar (com.amazonaws:aws-java-sdk-core:1.11.236)
  Duplicate class com.amazonaws.util.XMLWriter found in modules jetified-aws-android-sdk-core-2.15.2.jar (com.amazonaws:aws-android-sdk-core:2.15.2) and jetified-aws-java-sdk-core-1.11.236.jar (com.amazonaws:aws-java-sdk-core:1.11.236)
  Duplicate class com.amazonaws.util.XmlUtils found in modules jetified-aws-android-sdk-core-2.15.2.jar (com.amazonaws:aws-android-sdk-core:2.15.2) and jetified-aws-java-sdk-core-1.11.236.jar (com.amazonaws:aws-java-sdk-core:1.11.236)
  Duplicate class com.amazonaws.util.XpathUtils found in modules jetified-aws-android-sdk-core-2.15.2.jar (com.amazonaws:aws-android-sdk-core:2.15.2) and jetified-aws-java-sdk-core-1.11.236.jar (com.amazonaws:aws-java-sdk-core:1.11.236)



BUILD FAILED in 594ms
17 actionable tasks: 1 executed, 16 up-to-date

推荐答案

要回答所提出的问题,您将执行以下操作:

To answer your question as asked, you would do something like the following:

dependencies {
  ...
  implementation('edu.ucar:netcdf4:4.6.11') {
    exclude group: 'com.amazonaws', module: 'aws-java-sdk-s3'
  }
}

这将从旧的 netcdf-java 工件中排除 aws-java-sdk-s3 依赖性.不幸的是,AWS开发工具包的版本2不一定与AWS开发工具包的版本1兼容,因此,如果任何netcdf-java代码需要使用任何AWS开发工具包代码,则这可能无法正常工作.好消息是netCDF-Java现在处于版本5.3.2上,并且使用的是AWS开发工具包的版本2.

That will exclude the aws-java-sdk-s3 dependency from the old netcdf-java artifact. Unfortunately, version 2 of the AWS SDK isn't necessarily compatible with version 1 of the AWS SDK, so this will likely not work if any of the netcdf-java code needs to use any of the AWS SDK code. The good news is that netCDF-Java is now on version 5.3.2, and it uses version 2 of the AWS SDK.

其次,您是否要写入netCDF-4文件?如果没有,那么您就不需要 netcdf4 工件.根据您的目标,您可能只需要 cdm-core 工件(这将使您可以在本地读取HDF4/5,netCDF3/4文件或来自DAP2,cdmremote等远程协议的数据.).有关各种工件的更多信息,请参见 https://docs.unidata.ucar.edu/netcdf-java/current/userguide/using_netcdf_java_artifacts.html

Secondly, are you trying to write netCDF-4 files? If not, then you do not need the netcdf4 artifact. Depending on your goal, you may only need the cdm-core artifact (which will allow you to read HDF4/5, netCDF3/4 files locally, or data from remote protocols like DAP2, cdmremote, etc.). For more information on the various artifacts, please see https://docs.unidata.ucar.edu/netcdf-java/current/userguide/using_netcdf_java_artifacts.html

这篇关于Jetified-aws-android-sdk和jetified-aws-java-sdk中的重复类的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆