从特定 Web 应用程序的 Jetty 类路径中排除 lib/ext

Exclude lib/ext From Jetty Classpath For Specific Web Apps

我目前正在创建要部署到现有 Jetty 9 服务器上的 Web 服务。我决定使用 maven 来处理这个应用程序的依赖管理,这会产生一些问题。当我尝试启动该应用程序时,它因库冲突而失败。我发现问题的根源是类路径包括我的 Maven 依赖项和 $JETTY_HOME/lib/ext/ 中的 jars。我不能简单地重命名或删除 lib/ext,因为服务器上已有依赖这些库的应用程序。

有没有办法配置 jetty 以在每个应用程序的基础上从类路径中包含或排除 lib/ext?如果没有,是否有其他方法可以解决此问题?

TL;DR - 我认为没有简单的答案。

根据文档,lib/ext 目录中的 jar 由“ext”模块添加到类路径中。因此,理论上您可以禁用“ext”模块。但这将从容器中所有 Web 服务的类路径中删除 jars。所以那是行不通的……除了测试目的。

所以这给你留下了几个更激进的解决方案:

  1. 为 运行 新的网络应用程序设置一个单独的 Jetty 服务器。 (例如,使用 Docker 个容器。)

  2. 分析其他 webapps 以确定它们中哪些使用 lib/ext 目录中的 JAR,并重建它们的 WAR,以便(至少)冲突的依赖项在需要的 WAR 中他们而不是 lib/ext.

    这可能是您应该做的。

  3. 进行 Jetty 代码黑客攻击并修改 Jetty 构建“服务器”类路径的方式。如果您准备投入足够的编码工作,一切皆有可能。但是您将通过(实际上)创建 Jetty 的私有分支来为自己创建“技术部门”。所以这是一个非常糟糕的主意。