

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Come posso risolvere i conflitti di dipendenza?
<a name="ts-faq-dep-conflict-resolution"></a>

Quando si utilizza AWS SDK per Kotlin, sono necessarie dipendenze determinate AWS e di terze parti per funzionare correttamente. Se queste dipendenze mancano o sono presenti versioni inaspettate in fase di esecuzione, è possibile che vengano visualizzati errori come `NoSuchMethodError` o. `NoClassDefFoundError` Questi problemi di dipendenza di solito si dividono in due gruppi:
+ conflitti di dipendenza SDK/Smithy
+ Conflitti di dipendenza da terze parti

Quando crei la tua applicazione Kotlin, probabilmente utilizzerai Gradle per gestire le dipendenze. L'aggiunta di una dipendenza da un client di servizio SDK al progetto include automaticamente tutte le dipendenze correlate necessarie. Tuttavia, se l'applicazione ha altre dipendenze, queste potrebbero entrare in conflitto con quelle richieste dall'SDK. Ad esempio, l'SDK si basa su OkHttp un popolare client HTTP che potrebbe essere utilizzato anche dall'applicazione. Per aiutarvi a individuare questi conflitti, Gradle offre un pratico compito: elenca le dipendenze del progetto:

```
./gradlew dependencies
```

Quando si verificano conflitti di dipendenza, potrebbe essere necessario agire. È possibile specificare una versione particolare di una dipendenza o delle dipendenze shadow in un namespace locale. *La risoluzione delle dipendenze di Gradle è un argomento complesso che viene discusso nelle seguenti sezioni del Manuale utente di Gradle:*
+ [Comprendere la risoluzione delle dipendenze](https://docs.gradle.org/current/userguide/dependency_resolution.html)
+ [Vincoli di dipendenza e risoluzione dei conflitti](https://docs.gradle.org/current/userguide/dependency_constraints_conflicts.html)
+ [Allineamento delle versioni di dipendenza](https://docs.gradle.org/current/userguide/dependency_version_alignment.html)

## Gestione delle dipendenze SDK e Smithy nel progetto
<a name="sdk-smithy-dep-conflicts"></a>

Quando utilizzi l'SDK, tieni presente che i suoi moduli dipendono in genere da altri moduli SDK con numeri di versione corrispondenti. Ad esempio, `aws.sdk.kotlin:s3:1.2.3` dipende da a`ws.sdk.kotlin:aws-http:1.2.3`, che dipende `aws.sdk.kotlin:aws-core:1.2.3` da e così via.

I moduli SDK utilizzano anche versioni specifiche del modulo Smithy. Sebbene le versioni dei moduli Smithy non siano sincronizzate con i numeri di versione SDK, devono corrispondere alla versione prevista dell'SDK. Ad esempio, `aws.sdk.kotlin:s3:1.2.3` potrebbe dipendere da`aws.smithy.kotlin:serde:1.1.1`, che dipende da e così via`aws.smithy.kotlin:runtime-core:1.1.1`.

Per evitare conflitti di dipendenza, aggiorna tutte le dipendenze dell'SDK contemporaneamente e fai lo stesso per tutte le dipendenze Smithy esplicite. Prendi in considerazione l'utilizzo del nostro [catalogo di versioni Gradle per mantenere le versioni](setup-create-project-file.md) sincronizzate ed eliminare le congetture nella mappatura tra le versioni SDK e Smithy.

[Ricorda che gli aggiornamenti di versione minori nei SDK/Smithy moduli possono includere modifiche sostanziali, come indicato nella nostra politica di controllo delle versioni.](https://github.com/awslabs/aws-sdk-kotlin/blob/main/VERSIONING.md#versioning-policy) Quando esegui l'aggiornamento tra versioni minori, esamina attentamente i log delle modifiche e verifica accuratamente il comportamento di runtime.

## Risoluzione OkHttp dei conflitti di versione nell'applicazione
<a name="okhttp-dep-conflicts"></a>

[OkHttp](https://square.github.io/okhttp/)è un popolare motore HTTP che l'SDK utilizza per impostazione predefinita su JVM. L'applicazione potrebbe includere altre dipendenze o framework che introducono una versione diversa. OkHttp Ciò può causare una serie `NoClassDefFoundError` di classi nello spazio dei `okhttp3` nomi, ad esempio o. `okhttp/coroutines/ExecuteAsyncKt` `okhttp3/ConnectionListener` Quando ciò accade, in genere è consigliabile scegliere la versione più recente per risolvere i conflitti. Per aiutarvi a rintracciare le fonti di questi conflitti, Gradle offre un utile compito. Puoi elencare tutte le dipendenze eseguendo:

```
./gradlew dependencies
```

Ad esempio, se l'SDK dipende da OkHttp `5.0.0-alpha.14` e da essa dipende un'altra dipendenza come Spring Boot, OkHttp `4.12.0` allora dovresti usare il. `5.0.0-alpha.14 version` Puoi farlo con un `constraints` blocco in Gradle:

```
dependencies {
    constraints {
        implementation("com.squareup.okhttp3:okhttp:4.12.0")
    }
}
```

In alternativa, se è necessario utilizzare OkHttp 4.x, l'SDK fornisce un. `OkHttp4Engine` Consulta la [documentazione](https://github.com/smithy-lang/smithy-kotlin/tree/main/runtime/protocol/http-client-engines/http-client-engine-okhttp4) per informazioni su come configurare Gradle e utilizzarlo `OkHttp4Engine` nel codice.