gpt4 book ai didi

gradle - Gradle中传递依赖中的不同版本

转载 作者:行者123 更新时间:2023-12-03 04:01:41 25 4
gpt4 key购买 nike

在我的项目中,我被迫使用以下软件包:

  • com.sparkjava:spark-core:2.3,最终使用jetty-server:9.3.2.v20150730
  • org.apache.spark:spark-core_2.10:1.2.0,最终使用jetty-server:8.1.14.v20131031

  • 注意 com.sparkjavaorg.apache.spark彼此无关。它们分别被称为 spark

    这里的问题是两个 jetty 版本都不兼容,因此如果我强制 jetty 8.X导致系统崩溃,如果我强制 jetty 9.X再次导致系统崩溃,则在一种情况下将获得 java.lang.NoClassDefFoundError: org/eclipse/jetty/server/ServerConnector,在另一种情况下将获得 java.lang.NoClassDefFoundError: org/eclipse/jetty/server/bio/SocketConnector

    在这种情况下我应该怎么做?

    注意:我试图遮盖 jetty ,但是依赖项管理器只解决了一个问题(默认情况下为9.X,如果我强制使用,则为8.X),然后将其遮蔽,因此它实际上没有帮助。

    最佳答案

    解决这种情况将极其困难。

    Jetty 8.1比Jetty 9.3落后约4个主要版本,代表了数百个不同版本。

    Note: Jetty versioning is [servlet_support].[major_ver].[minor_ver].

    Jetty 8.x is Servlet 3.0, while Jetty 9.x is Servlet 3.1



    从那时开始,连接器的体系结构发生了巨大的变化,从Jetty 8中的老式阻塞套接字到Jetty 9中完全没有阻塞连接器,Jetty 9需要发展连接器以支持TLS / 1.2和ALPN中的功能。为了正确支持HTTP / 2,以及内部I / O处理以支持新的Servlet 3.1异步I / O功能集。

    解决方案1:

    如果没有某种类加载程序隔离,并且无法进行仔细的配置以确保它们不会占用相同的资源(侦听端口,临时文件等),则您将无法在同一虚拟机上运行两个版本。

    解决方案2:

    升级(或降级)一个或另一个 Spark 依赖项,直到您遇到一个普通的 jetty 版本。 ( Spark_2.11 / 2.0.0 seems to support Jetty 9.2.x)

    解决方案3:

    Apache Spark是开源的,请提交一个补丁,将其对Jetty的使用升级到9.3(这可能很困难,因为Apache Spark尚未准备好使用Java 8,这是Jetty 9.3的要求)

    关于gradle - Gradle中传递依赖中的不同版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38696852/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com