Почему Maven жалуется на предположительно отсутствующий метод в netty-tcnative-boringssl-static? - PullRequest
0 голосов
/ 08 мая 2019

У меня есть некоторые проблемы с одной конкретной зависимостью в моем проекте весенней загрузки.Я использую netty-tcnative-boringssl-static и обновил мою версию весенней загрузки с 2.0.5 до 2.1.3, теперь я получаю следующее сообщение об ошибке, которое не могу расшифровать:

***************************
APPLICATION FAILED TO START
***************************

Description:
An attempt was made to call the method io.netty.internal.tcnative.SSLContext.setCipherSuite(JLjava/lang/String;Z)Z but it does not exist. Its class, io.netty.internal.tcnative.SSLContext, is available from the following locations:

    jar:file:/C:/Users/xxx/.m2/repository/io/netty/netty-tcnative-boringssl-static/2.0.12.Final/netty-tcnative-boringssl-static-2.0.12.Final.jar!/io/netty/internal/tcnative/SSLContext.class

It was loaded from the following location:

    file:/C:/Users/xxx/.m2/repository/io/netty/netty-tcnative-boringssl-static/2.0.12.Final/netty-tcnative-boringssl-static-2.0.12.Final.jar


Action:
Correct the classpath of your application so that it contains a single, compatible version of io.netty.internal.tcnative.SSLContext

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

Я думаю, что по какой-то причине netty-tcnative-boringssl-static не совместим с spring-boot> 2.1.0.Подпись метода в сообщении об ошибке озадачивает меня.

Как бы выглядел setCipherSuite(JLjava/lang/String;Z)Z в коде Java?Метод, к которому у меня есть доступ, имеет эту подпись public static boolean setCipherSuite(long ctx, String ciphers).

Я не уверен, что это фактическое несоответствие, если нет, то у меня нет идей, если да, то я мог бы это исправитьвозиться с разными версиями.

Кто-нибудь есть идеи?

1 Ответ

1 голос
/ 09 мая 2019

Вы можете посмотреть спецификацию JVM: jvms-4.3.2 для конвертации.

enter image description here

Таким образом, в вашем случае (JLjava / lang / String; Z) Z преобразуется в метод с long (J), String (Ljava/lang/String;), логическим (Z) и возвращаемым типом является логическое (Z).

проверяя основную ветку netty-tcnative, я мог видеть 2 метода для setCipherSuite(..) с одним из устаревших методов

@Deprecated
    public static boolean setCipherSuite(long ctx, String ciphers) throws Exception {
        return setCipherSuite(ctx, ciphers, false);
    }

    public static native boolean setCipherSuite(long ctx, String ciphers, boolean tlsv13) throws Exception; 
...