java.lang.NoClassDefFoundError: io/netty/handler/s

2019-05-29 02:26发布

问题:

I am trying to implement relayrides/pushy, but am getting the following runtime error:

Jun 28, 2017 2:06:58 PM com.turo.pushy.apns.SslUtil getSslProvider
INFO: Native SSL provider not available; will use JDK SSL provider.
Exception in thread "main" java.lang.NoClassDefFoundError: io/netty/handler/ssl/SslContextBuilder
  at com.turo.pushy.apns.ApnsClientBuilder.build(ApnsClientBuilder.java:396)
  at com.jobs.spring.service.NotificationServiceImpl.sendIOSPushNotification(NotificationServiceImpl.java:122)

  Caused by: java.lang.ClassNotFoundException: io.netty.handler.ssl.SslContextBuilder

pom.xml

    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.5.2</version>
    </dependency>
    <!-- Push Notifications -->
    <dependency>
        <groupId>com.turo</groupId>
        <artifactId>pushy</artifactId>
        <version>0.10</version>
    </dependency>
    <dependency>
        <groupId>io.netty</groupId>
        <artifactId>netty-tcnative</artifactId>
        <version>2.0.5.Final</version>
    </dependency>
    <dependency>
        <groupId>io.netty</groupId>
        <artifactId>netty-handler</artifactId>
        <version>4.0.27.Final</version>
    </dependency>
    <dependency>
        <groupId>com.ning</groupId>
        <artifactId>async-http-client</artifactId>
        <version>1.9.40</version>
    </dependency>
    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.8.1</version>
    </dependency>

java

    final ApnsClient apnsClient = new ApnsClientBuilder()
            .setClientCredentials(new File(PATH_TO_P12_CERT), CERT_PASSWORD )
            .build();

I am guessing my mvn dependencies are incorrect. Any help appreciated.

UPDATE

I updated my dependencies to:

    <dependency>
        <groupId>com.turo</groupId>
        <artifactId>pushy</artifactId>
        <version>0.10</version>
    </dependency>
    <dependency>
        <groupId>io.netty</groupId>
        <artifactId>netty-all</artifactId>
        <version>4.1.11.Final</version>
    </dependency>
    <dependency>
        <groupId>io.netty</groupId>
        <artifactId>netty-tcnative</artifactId>
        <version>2.0.1.Final</version>
    </dependency>
    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.6</version>
    </dependency>

But now get:

Jun 28, 2017 2:40:18 PM com.turo.pushy.apns.SslUtil getSslProvider
INFO: Native SSL provider not available; will use JDK SSL provider.
Exception in thread "main" java.lang.NoSuchMethodError: io.netty.bootstrap.Bootstrap.config()Lio/netty/bootstrap/BootstrapConfig;
  at com.turo.pushy.apns.ApnsClient.<init>(ApnsClient.java:172)
  at com.turo.pushy.apns.ApnsClientBuilder.build(ApnsClientBuilder.java:420)
  at com.jobs.spring.service.NotificationServiceImpl.sendIOSPushNotification(NotificationServiceImpl.java:121)

回答1:

seems like you mix netty 4.1 and 4.0. You need to only use 4.1 if you want to use pushy.



回答2:

Did you clean your classpath in between I created a test project containing only the dependency

<dependency>
    <groupId>com.turo</groupId>
    <artifactId>pushy</artifactId>
    <version>0.10</version>
</dependency>

and a simple main class just creating the client with the snipped you are using above and it works out fine

To me it looks like there might be two versions of BootstrapConfig on the classpath. Try to remove all dependencies besides pushy and clean/refreshing the maven dependencies.