You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何针对特定Web应用在Jetty类路径中排除lib/ext目录?

Jetty 9单应用屏蔽lib/ext依赖冲突解决方案

单应用维度控制lib/ext加载的实现方法

Jetty 9原生支持按单个Web应用自定义类加载逻辑,无需修改全局配置,也不会影响服务器上其他应用,操作如下:

  1. 在你的Web应用源码的WEB-INF目录下新增jetty-web.xml配置文件,文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd">
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
  <!-- 配置当前应用优先加载自身WEB-INF下的类,优先级高于Jetty全局类路径(含lib/ext) -->
  <Set name="parentLoaderPriority">false</Set>
  <!-- 如需完全屏蔽全局lib/ext的所有类,追加以下配置 -->
  <Call name="addServerClass">
    <Arg>-</Arg>
  </Call>
  <!-- 如需屏蔽指定包的全局类,按以下格式配置,前缀-代表排除 -->
  <!--
  <Call name="addSystemClass">
    <Arg>-com.example.conflict.package.</Arg>
  </Call>
  -->
</Configure>
  1. 重新打包应用部署即可,该配置仅对当前应用生效,其他应用仍会正常加载$JETTY_HOME/lib/ext下的依赖。

其他可行替代方案

如果不想修改Jetty应用配置,可选择以下方案解决冲突:

  • 调整Maven依赖范围:确认你的应用兼容$JETTY_HOME/lib/ext下的冲突依赖版本后,在pom.xml中将对应冲突依赖的<scope>设为provided,打包时排除该依赖,直接使用服务器侧提供的版本。
  • 依赖shade重命名:使用maven-shade-plugin打包应用,将冲突的依赖包重命名(包名前缀增加自定义标识),从类名层面完全规避冲突,无需修改任何服务器侧配置,兼容性最高。
  • 独立上下文配置:如果服务器权限足够,可为你的应用单独配置独立的Jetty上下文,指定专属的ext目录,完全隔离全局lib/ext路径。

内容的提问来源于stack exchange,提问作者pbuchheit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 12:48:04