Я наконец нашел решение, и оно о конфликте зависимостей maven
. Более чем одна зависимость зависит от netty
в разных версиях.
Я добавил зависимость aws
и azure
в maven, как показано ниже:
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk</artifactId>
<version>1.11.327</version>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-storage-blob</artifactId>
<version>12.0.0</version>
</dependency>
Используя инструмент maven mvn dependency:tree
, я получил вывод следующим образом:
[INFO] | +- com.amazonaws:aws-java-sdk-kinesisvideo:jar:1.11.327:compile
[INFO] | | +- io.netty:netty-codec-http:jar:4.1.17.Final:compile
[INFO] | | | \- io.netty:netty-codec:jar:4.1.17.Final:compile
[INFO] | | \- io.netty:netty-handler:jar:4.1.17.Final:compile
[INFO] | | +- io.netty:netty-buffer:jar:4.1.17.Final:compile
[INFO] | | | \- io.netty:netty-common:jar:4.1.17.Final:compile
[INFO] | | \- io.netty:netty-transport:jar:4.1.17.Final:compile
[INFO] | | \- io.netty:netty-resolver:jar:4.1.17.Final:compile
[INFO] | \- com.azure:azure-storage-common:jar:12.0.0:compile
[INFO] | \- com.azure:azure-core-http-netty:jar:1.0.0:compile
[INFO] | +- io.netty:netty-handler-proxy:jar:4.1.42.Final:compile
[INFO] | | \- io.netty:netty-codec-socks:jar:4.1.42.Final:compile
[INFO] | +- io.projectreactor.netty:reactor-netty:jar:0.9.0.RELEASE:compile
[INFO] | | +- io.netty:netty-codec-http2:jar:4.1.39.Final:compile
[INFO] | | +- io.netty:netty-transport-native-epoll:jar:linux-x86_64:4.1.39.Final:compile
[INFO] | | | \- io.netty:netty-transport-native-unix-common:jar:4.1.39.Final:compile
[INFO] | | \- io.projectreactor.addons:reactor-pool:jar:0.1.0.RELEASE:compile
[INFO] | \- com.azure:azure-core-test:jar:1.0.0:compile
[INFO] | \- io.projectreactor:reactor-test:jar:3.3.0.RELEASE:compile
Как мы видим, azure
и aws
зависели от netty
, а версия netty
отличается. Таким образом, вопрос заключается в разрешении конфликта.
Согласно введению из maven ,
Поскольку Maven разрешает зависимости транзитивно, нежелательные зависимости могут быть включены в путь к классам вашего проекта. Например, некоторые старые jar могут иметь проблемы с безопасностью или быть несовместимыми с версией Java, которую вы используете. Чтобы решить эту проблему, Maven позволяет исключить определенные c зависимости. Исключения устанавливаются на указанную c зависимость в вашем POM и нацелены на определенный groupId и artifactId. Когда вы создаете свой проект, этот артефакт не будет добавлен в путь к классам вашего проекта из-за зависимости, в которой было объявлено исключение.
Нам нужно исключить netty
4.1.17, чтобы он не будет добавлен в classpath проекта и явно не установит netty
на azure
.
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk</artifactId>
<version>1.11.327</version>
<exclusions>
<exclusion>
<artifactId>*</artifactId>
<groupId>io.netty</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-storage-blob</artifactId>
<version>12.0.0</version>
</dependency>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.42.Final</version>
</dependency>
Если добавить вышеуказанные зависимости к pom.xml
, azure
будет работать нормально.