请选择 进入手机版 | 继续访问电脑版

默认
发表评论 1
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
[已回复]求教Rainbowchat的Server端TCP无法开启TLS的问题
如题,我在开启服务端TCP传输加密的时候遇到了一些问题,具体如下:
环境:idea 2020.3.2  ; tomcat-9.0.33  ;java 1.8.0_412
按照文档说明操作:
       1.设置GatewayTCP.sslContext
       2.配置证书(自签名、dome中的证书、netty自带的证书都试过结果一样)
       3.启动服务,抛异常java.lang.ClassNotFoundException: org.bouncycastle.jce.provider.BouncyCastleProvider
                  

1

1

        4.导入相关依赖
                  2.png

       5.重新启动服务,没有其他异常,但是仍然无法启动
               

3

3


请问这是哪里有问题,困扰我一天了,非常感谢。

完整信息:
DEBUG - [10:33:37.573]【群成员高速缓存】全部群组缓存从DB载入 【START】 | (GroupsMembersCacheProvider^reloadAllFromDB:101)
DEBUG - [10:33:37.575]queryData{SQL: select a.g_id,a.user_uid from group_members a  where EXISTS (select 1 from group_base b where a.g_id=b.g_id and b.g_status=1)  order by a.g_id} | (DBShell^queryData:296)
DEBUG - [10:33:37.583]【群成员高速缓存】全部群组缓存从DB载入完成,共解析379行原始数据,最终缓存群组数:77,耗时:7 毫秒。 | (GroupsMembersCacheProvider^reloadAllFromDB:141)
DEBUG - [10:33:37.583]【群成员高速缓存】全部群组缓存从DB载入 【END】 | (GroupsMembersCacheProvider^reloadAllFromDB:149)
DEBUG - [10:33:37.583]【群成员高速缓存】-----------------------------END---------------------------- | (GroupsMembersCacheProvider^reloadAllFromDB:150)
DEBUG - [10:33:37.621]Using SLF4J as the default logging framework | (InternalLoggerFactory^useSlf4JLoggerFactory:63)
DEBUG - [10:33:37.624]-Dio.netty.noUnsafe: false | (PlatformDependent0^explicitNoUnsafeCause0:515)
DEBUG - [10:33:37.624]Java version: 8 | (PlatformDependent0^javaVersion0:1026)
DEBUG - [10:33:37.626]sun.misc.Unsafe.theUnsafe: available | (PlatformDependent0^<clinit>:140)
DEBUG - [10:33:37.626]sun.misc.Unsafe.copyMemory: available | (PlatformDependent0^<clinit>:164)
DEBUG - [10:33:37.627]sun.misc.Unsafe.storeFence: available | (PlatformDependent0^<clinit>:196)
DEBUG - [10:33:37.627]java.nio.Buffer.address: available | (PlatformDependent0^<clinit>:239)
DEBUG - [10:33:37.627]direct buffer constructor: available | (PlatformDependent0^<clinit>:312)
DEBUG - [10:33:37.628]java.nio.Bits.unaligned: available, true | (PlatformDependent0^<clinit>:403)
DEBUG - [10:33:37.628]jdk.internal.misc.Unsafe.allocateUninitializedArray(int): unavailable prior to Java9 | (PlatformDependent0^<clinit>:478)
DEBUG - [10:33:37.628]java.nio.DirectByteBuffer.<init>(long, {int,long}): available | (PlatformDependent0^<clinit>:501)
DEBUG - [10:33:37.629]sun.misc.Unsafe: available | (PlatformDependent^unsafeUnavailabilityCause0:1160)
DEBUG - [10:33:37.629]-Dio.netty.tmpdir: D:\Tomcat\apache-tomcat-9.0.33\temp (java.io.tmpdir) | (PlatformDependent^tmpdir0:1306)
DEBUG - [10:33:37.629]-Dio.netty.bitMode: 64 (sun.arch.data.model) | (PlatformDependent^bitMode0:1385)
DEBUG - [10:33:37.629]Platform: Windows | (PlatformDependent^isWindows0:1120)
DEBUG - [10:33:37.630]-Dio.netty.maxDirectMemory: 3767533568 bytes | (PlatformDependent^<clinit>:176)
DEBUG - [10:33:37.630]-Dio.netty.uninitializedArrayAllocationThreshold: -1 | (PlatformDependent^<clinit>:183)
DEBUG - [10:33:37.631]java.nio.ByteBuffer.cleaner(): available | (CleanerJava6^<clinit>:92)
DEBUG - [10:33:37.631]-Dio.netty.noPreferDirect: false | (PlatformDependent^<clinit>:203)
27-Jun-2024 10:33:37.826 信息 [Catalina-utility-2] org.apache.catalina.startup.HostConfig.deployDirectory 把web 应用程序部署到目录 [D:\Tomcat\apache-tomcat-9.0.33\webapps\manager]
27-Jun-2024 10:33:37.871 信息 [Catalina-utility-2] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [D:\Tomcat\apache-tomcat-9.0.33\webapps\manager] has finished in [45] ms
DEBUG - [10:33:38.408]-Dio.netty.leakDetection.level: simple | (ResourceLeakDetector^<clinit>:129)
DEBUG - [10:33:38.408]-Dio.netty.leakDetection.targetRecords: 4 | (ResourceLeakDetector^<clinit>:130)
DEBUG - [10:33:38.421]-Dio.netty.buffer.checkAccessible: true | (AbstractByteBuf^<clinit>:63)
DEBUG - [10:33:38.422]-Dio.netty.buffer.checkBounds: true | (AbstractByteBuf^<clinit>:64)
DEBUG - [10:33:38.424]Loaded default ResourceLeakDetector: io.netty.util.ResourceLeakDetector@4ff97ac | (ResourceLeakDetectorFactory$DefaultResourceLeakDetectorFactory^newResourceLeakDetector:196)
DEBUG - [10:33:38.439]-Dio.netty.threadLocalMap.stringBuilder.initialSize: 1024 | (InternalThreadLocalMap^<clinit>:100)
DEBUG - [10:33:38.439]-Dio.netty.threadLocalMap.stringBuilder.maxSize: 4096 | (InternalThreadLocalMap^<clinit>:101)
DEBUG - [10:33:38.443]-Dio.netty.allocator.numHeapArenas: 16 | (PooledByteBufAllocator^<clinit>:157)
DEBUG - [10:33:38.443]-Dio.netty.allocator.numDirectArenas: 16 | (PooledByteBufAllocator^<clinit>:158)
DEBUG - [10:33:38.444]-Dio.netty.allocator.pageSize: 8192 | (PooledByteBufAllocator^<clinit>:160)
DEBUG - [10:33:38.444]-Dio.netty.allocator.maxOrder: 9 | (PooledByteBufAllocator^<clinit>:165)
DEBUG - [10:33:38.444]-Dio.netty.allocator.chunkSize: 4194304 | (PooledByteBufAllocator^<clinit>:169)
DEBUG - [10:33:38.444]-Dio.netty.allocator.smallCacheSize: 256 | (PooledByteBufAllocator^<clinit>:170)
DEBUG - [10:33:38.444]-Dio.netty.allocator.normalCacheSize: 64 | (PooledByteBufAllocator^<clinit>:171)
DEBUG - [10:33:38.444]-Dio.netty.allocator.maxCachedBufferCapacity: 32768 | (PooledByteBufAllocator^<clinit>:172)
DEBUG - [10:33:38.445]-Dio.netty.allocator.cacheTrimInterval: 8192 | (PooledByteBufAllocator^<clinit>:173)
DEBUG - [10:33:38.445]-Dio.netty.allocator.cacheTrimIntervalMillis: 0 | (PooledByteBufAllocator^<clinit>:174)
DEBUG - [10:33:38.445]-Dio.netty.allocator.useCacheForAllThreads: false | (PooledByteBufAllocator^<clinit>:175)
DEBUG - [10:33:38.445]-Dio.netty.allocator.maxCachedByteBuffersPerChunk: 1023 | (PooledByteBufAllocator^<clinit>:176)
DEBUG - [10:33:38.455]-Dio.netty.allocator.type: pooled | (ByteBufUtil^<clinit>:89)
DEBUG - [10:33:38.455]-Dio.netty.threadLocalDirectBufferSize: 0 | (ByteBufUtil^<clinit>:98)
DEBUG - [10:33:38.455]-Dio.netty.maxThreadLocalCharBufferSize: 16384 | (ByteBufUtil^<clinit>:101)
DEBUG - [10:33:38.501]Bouncy Castle provider available | (BouncyCastlePemReader$1^run:84)
DEBUG - [10:33:38.524]Parsed PEM object of type org.bouncycastle.asn1.pkcs.PrivateKeyInfo and assume key is not encrypted | (BouncyCastlePemReader^getPrivateKey:157)
DEBUG - [10:33:38.542]-Dio.netty.native.workdir: D:\Tomcat\apache-tomcat-9.0.33\temp (io.netty.tmpdir) | (NativeLibraryLoader^<clinit>:78)
DEBUG - [10:33:38.542]-Dio.netty.native.deleteLibAfterLoading: true | (NativeLibraryLoader^<clinit>:83)
DEBUG - [10:33:38.542]-Dio.netty.native.tryPatchShadedId: true | (NativeLibraryLoader^<clinit>:87)
DEBUG - [10:33:38.542]-Dio.netty.native.detectNativeLibraryDuplicates: true | (NativeLibraryLoader^<clinit>:91)
DEBUG - [10:33:38.806]Successfully loaded the library D:\Tomcat\apache-tomcat-9.0.33\temp\netty_tcnative_windows_x86_642788031203377379198.dll | (NativeLibraryLoader^loadLibrary:389)
DEBUG - [10:33:38.807]Loaded library with name 'netty_tcnative_windows_x86_64' | (NativeLibraryLoader^loadFirstAvailable:106)
DEBUG - [10:33:38.808]Initialize netty-tcnative using engine: 'default' | (OpenSsl^<clinit>:164)
DEBUG - [10:33:38.809]netty-tcnative using native library: BoringSSL | (OpenSsl^<clinit>:191)
DEBUG - [10:33:38.898]KeyManagerFactory not supported. | (OpenSsl^<clinit>:316)
DEBUG - [10:33:38.898]Cipher suite mapping: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 => ECDHE-ECDSA-AES128-GCM-SHA256 | (CipherSuiteConverter^cacheFromOpenSsl:352)
DEBUG - [10:33:38.898]Cipher suite mapping: SSL_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 => ECDHE-ECDSA-AES128-GCM-SHA256 | (CipherSuiteConverter^cacheFromOpenSsl:353)
DEBUG - [10:33:38.898]Cipher suite mapping: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 => ECDHE-RSA-AES128-GCM-SHA256 | (CipherSuiteConverter^cacheFromOpenSsl:352)
DEBUG - [10:33:38.898]Cipher suite mapping: SSL_ECDHE_RSA_WITH_AES_128_GCM_SHA256 => ECDHE-RSA-AES128-GCM-SHA256 | (CipherSuiteConverter^cacheFromOpenSsl:353)
DEBUG - [10:33:38.899]Cipher suite mapping: TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 => ECDHE-ECDSA-AES256-GCM-SHA384 | (CipherSuiteConverter^cacheFromOpenSsl:352)
DEBUG - [10:33:38.899]Cipher suite mapping: SSL_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 => ECDHE-ECDSA-AES256-GCM-SHA384 | (CipherSuiteConverter^cacheFromOpenSsl:353)
DEBUG - [10:33:38.899]Cipher suite mapping: TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 => ECDHE-RSA-AES256-GCM-SHA384 | (CipherSuiteConverter^cacheFromOpenSsl:352)
DEBUG - [10:33:38.899]Cipher suite mapping: SSL_ECDHE_RSA_WITH_AES_256_GCM_SHA384 => ECDHE-RSA-AES256-GCM-SHA384 | (CipherSuiteConverter^cacheFromOpenSsl:353)
DEBUG - [10:33:38.899]Cipher suite mapping: TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 => ECDHE-ECDSA-CHACHA20-POLY1305 | (CipherSuiteConverter^cacheFromOpenSsl:352)
DEBUG - [10:33:38.899]Cipher suite mapping: SSL_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 => ECDHE-ECDSA-CHACHA20-POLY1305 | (CipherSuiteConverter^cacheFromOpenSsl:353)
DEBUG - [10:33:38.899]Cipher suite mapping: TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 => ECDHE-RSA-CHACHA20-POLY1305 | (CipherSuiteConverter^cacheFromOpenSsl:352)
DEBUG - [10:33:38.899]Cipher suite mapping: SSL_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 => ECDHE-RSA-CHACHA20-POLY1305 | (CipherSuiteConverter^cacheFromOpenSsl:353)
DEBUG - [10:33:38.899]Cipher suite mapping: TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256 => ECDHE-PSK-CHACHA20-POLY1305 | (CipherSuiteConverter^cacheFromOpenSsl:352)
DEBUG - [10:33:38.900]Cipher suite mapping: SSL_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256 => ECDHE-PSK-CHACHA20-POLY1305 | (CipherSuiteConverter^cacheFromOpenSsl:353)
DEBUG - [10:33:38.900]Cipher suite mapping: TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA => ECDHE-ECDSA-AES128-SHA | (CipherSuiteConverter^cacheFromOpenSsl:352)
DEBUG - [10:33:38.900]Cipher suite mapping: SSL_ECDHE_ECDSA_WITH_AES_128_CBC_SHA => ECDHE-ECDSA-AES128-SHA | (CipherSuiteConverter^cacheFromOpenSsl:353)
DEBUG - [10:33:38.900]Cipher suite mapping: TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA => ECDHE-RSA-AES128-SHA | (CipherSuiteConverter^cacheFromOpenSsl:352)
DEBUG - [10:33:38.900]Cipher suite mapping: SSL_ECDHE_RSA_WITH_AES_128_CBC_SHA => ECDHE-RSA-AES128-SHA | (CipherSuiteConverter^cacheFromOpenSsl:353)
DEBUG - [10:33:38.901]Cipher suite mapping: TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA => ECDHE-PSK-AES128-CBC-SHA | (CipherSuiteConverter^cacheFromOpenSsl:352)
DEBUG - [10:33:38.901]Cipher suite mapping: SSL_ECDHE_PSK_WITH_AES_128_CBC_SHA => ECDHE-PSK-AES128-CBC-SHA | (CipherSuiteConverter^cacheFromOpenSsl:353)
DEBUG - [10:33:38.901]Cipher suite mapping: TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA => ECDHE-ECDSA-AES256-SHA | (CipherSuiteConverter^cacheFromOpenSsl:352)
DEBUG - [10:33:38.902]Cipher suite mapping: SSL_ECDHE_ECDSA_WITH_AES_256_CBC_SHA => ECDHE-ECDSA-AES256-SHA | (CipherSuiteConverter^cacheFromOpenSsl:353)
DEBUG - [10:33:38.902]Cipher suite mapping: TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA => ECDHE-RSA-AES256-SHA | (CipherSuiteConverter^cacheFromOpenSsl:352)
DEBUG - [10:33:38.902]Cipher suite mapping: SSL_ECDHE_RSA_WITH_AES_256_CBC_SHA => ECDHE-RSA-AES256-SHA | (CipherSuiteConverter^cacheFromOpenSsl:353)
DEBUG - [10:33:38.902]Cipher suite mapping: TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA => ECDHE-PSK-AES256-CBC-SHA | (CipherSuiteConverter^cacheFromOpenSsl:352)
DEBUG - [10:33:38.903]Cipher suite mapping: SSL_ECDHE_PSK_WITH_AES_256_CBC_SHA => ECDHE-PSK-AES256-CBC-SHA | (CipherSuiteConverter^cacheFromOpenSsl:353)
DEBUG - [10:33:38.903]Cipher suite mapping: TLS_RSA_WITH_AES_128_GCM_SHA256 => AES128-GCM-SHA256 | (CipherSuiteConverter^cacheFromOpenSsl:352)
DEBUG - [10:33:38.903]Cipher suite mapping: SSL_RSA_WITH_AES_128_GCM_SHA256 => AES128-GCM-SHA256 | (CipherSuiteConverter^cacheFromOpenSsl:353)
DEBUG - [10:33:38.903]Cipher suite mapping: TLS_RSA_WITH_AES_256_GCM_SHA384 => AES256-GCM-SHA384 | (CipherSuiteConverter^cacheFromOpenSsl:352)
DEBUG - [10:33:38.904]Cipher suite mapping: SSL_RSA_WITH_AES_256_GCM_SHA384 => AES256-GCM-SHA384 | (CipherSuiteConverter^cacheFromOpenSsl:353)
DEBUG - [10:33:38.904]Cipher suite mapping: TLS_RSA_WITH_AES_128_CBC_SHA => AES128-SHA | (CipherSuiteConverter^cacheFromOpenSsl:352)
DEBUG - [10:33:38.904]Cipher suite mapping: SSL_RSA_WITH_AES_128_CBC_SHA => AES128-SHA | (CipherSuiteConverter^cacheFromOpenSsl:353)
DEBUG - [10:33:38.904]Cipher suite mapping: TLS_PSK_WITH_AES_128_CBC_SHA => PSK-AES128-CBC-SHA | (CipherSuiteConverter^cacheFromOpenSsl:352)
DEBUG - [10:33:38.904]Cipher suite mapping: SSL_PSK_WITH_AES_128_CBC_SHA => PSK-AES128-CBC-SHA | (CipherSuiteConverter^cacheFromOpenSsl:353)
DEBUG - [10:33:38.904]Cipher suite mapping: TLS_RSA_WITH_AES_256_CBC_SHA => AES256-SHA | (CipherSuiteConverter^cacheFromOpenSsl:352)
DEBUG - [10:33:38.904]Cipher suite mapping: SSL_RSA_WITH_AES_256_CBC_SHA => AES256-SHA | (CipherSuiteConverter^cacheFromOpenSsl:353)
DEBUG - [10:33:38.904]Cipher suite mapping: TLS_PSK_WITH_AES_256_CBC_SHA => PSK-AES256-CBC-SHA | (CipherSuiteConverter^cacheFromOpenSsl:352)
DEBUG - [10:33:38.904]Cipher suite mapping: SSL_PSK_WITH_AES_256_CBC_SHA => PSK-AES256-CBC-SHA | (CipherSuiteConverter^cacheFromOpenSsl:353)
DEBUG - [10:33:38.905]Cipher suite mapping: TLS_RSA_WITH_3DES_EDE_CBC_SHA => DES-CBC3-SHA | (CipherSuiteConverter^cacheFromOpenSsl:352)
DEBUG - [10:33:38.905]Cipher suite mapping: SSL_RSA_WITH_3DES_EDE_CBC_SHA => DES-CBC3-SHA | (CipherSuiteConverter^cacheFromOpenSsl:353)
DEBUG - [10:33:38.905]Supported protocols (OpenSSL): [SSLv2Hello, TLSv1, TLSv1.1, TLSv1.2, TLSv1.3]  | (OpenSsl^<clinit>:444)
DEBUG - [10:33:38.905]Default cipher suites (OpenSSL): [TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_128_GCM_SHA256, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_256_CBC_SHA, TLS_AES_128_GCM_SHA256, TLS_AES_256_GCM_SHA384, TLS_AES_128_GCM_SHA256, TLS_AES_256_GCM_SHA384, TLS_AES_128_GCM_SHA256, TLS_AES_256_GCM_SHA384, TLS_CHACHA20_POLY1305_SHA256] | (OpenSsl^<clinit>:445)
INFO  - [10:33:38.911]基于EVA.EPC平台的J2EE模块已经被注销了! | (WebListener^contextDestroyed:59)
27-Jun-2024 10:33:38.907 严重 [RMI TCP Connection(3)-127.0.0.1] org.apache.catalina.core.StandardContext.startInternal One or more listeners failed to start. Full details will be found in the appropriate container log file
27-Jun-2024 10:33:38.908 严重 [RMI TCP Connection(3)-127.0.0.1] org.apache.catalina.core.StandardContext.startInternal Context [/RainbowChatServer_war] startup failed due to previous errors
27-Jun-2024 10:33:38.914 警告 [RMI TCP Connection(3)-127.0.0.1] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesJdbc Web应用程序 [RainbowChatServer_war] 注册了JDBC驱动程序 [com.mysql.cj.jdbc.Driver],但在Web应用程序停止时无法注销它。 为防止内存泄漏,JDBC驱动程序已被强制取消注册。
27-Jun-2024 10:33:38.915 严重 [RMI TCP Connection(3)-127.0.0.1] org.apache.catalina.loader.WebappClassLoaderBase.checkThreadLocalMapForLeaks The web application [RainbowChatServer_war] created a ThreadLocal with key of type [java.lang.ThreadLocal] (value [java.lang.ThreadLocal@7c9fd2cb]) and a value of type [io.netty.util.internal.InternalThreadLocalMap] (value [io.netty.util.internal.InternalThreadLocalMap@3e84ebc1]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
[2024-06-27 10:33:38,923] Artifact RainbowChatServer:war: 部署工件时出错。请参阅服务器日志了解详细信息。
27-Jun-2024 10:33:43.880 信息 [mysql-cj-abandoned-connection-cleanup] org.apache.catalina.loader.WebappClassLoaderBase.checkStateForResourceLoading 非法访问:此Web应用程序实例已停止。无法加载[]。为了调试以及终止导致非法访问的线程,将抛出以下堆栈跟踪。
        java.lang.IllegalStateException: 非法访问:此Web应用程序实例已停止。无法加载[]。为了调试以及终止导致非法访问的线程,将抛出以下堆栈跟踪。
                at org.apache.catalina.loader.WebappClassLoaderBase.checkStateForResourceLoading(WebappClassLoaderBase.java:1385)
                at org.apache.catalina.loader.WebappClassLoaderBase.getResource(WebappClassLoaderBase.java:1038)
                at com.mysql.cj.jdbc.AbandonedConnectionCleanupThread.checkThreadContextClassLoader(AbandonedConnectionCleanupThread.java:123)
                at com.mysql.cj.jdbc.AbandonedConnectionCleanupThread.run(AbandonedConnectionCleanupThread.java:90)
                at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
                at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
                at java.lang.Thread.run(Thread.java:750)





即时通讯网 - 即时通讯开发者社区! 来源: - 即时通讯开发者社区!

上一篇:[已回复] 对RainbowChat的功能测试后的一点建议
推荐方案
评论 1
在你服务端的pom.xml里,把这两个库,用我指定的这个版本,然后再试试看:
    <dependency>
      <groupId>com.eatthepath</groupId>
      <artifactId>pushy</artifactId>
      <version>0.15.0</version><!-- 0.14.1版需要JDK1.8及以上版本 -->
    </dependency>

    <dependency>
      <groupId>io.netty</groupId>
      <artifactId>netty-all</artifactId>
      <version>4.1.67.Final</version>
    </dependency>
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部