在 Java Web 应用程序中加载外部库

2023-11-22

我的场景如下:

我有一个部署到 servlet 容器的 WebApp.war。此 WebApp.war 在 WEB-INF/lib 中包含以下库:

  • lib_a.jar
  • lib_b.jar

我还有另一个库,例如 lib_vendor.jar,由于许可问题,我无法在 WebApp/WEB-INF/lib 中部署该库,因此我让客户在应用程序安装后将该库复制到 tomcat/lib 中。但由于 lib_vendor.jar 需要在 Web 应用程序类加载器中加载的 lib_a.jar 和 lib_b.jar,因此我无法使用 lib_vendor.jar。

如何在 Web 应用程序的同一个类加载器中加载外部库(不在 WEB-INF/lib 中)?


由于您使用的是 Tomcat,因此您可以利用虚拟Web应用程序加载器.

Add a META-INF/context.xml whith

<?xml version="1.0" encoding="UTF-8"?>
<Context path="/somepath/myapp">
    <Loader className="org.apache.catalina.loader.VirtualWebappLoader"
              virtualClasspath="/somedir/*.jar"/>
</Context>

还要记住,virtualClasspath 属性必须是绝对路径,如下面的注释中正确所述。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Java Web 应用程序中加载外部库 的相关文章

随机推荐

  • Python API 设计中的重载(或替代方案)

    我有一个大型的现有程序库 当前具有 NET 绑定 并且我正在考虑编写 Python 绑定 现有的 API 广泛使用基于签名的重载 所以 我有大量静态函数 例如 Circle p1 p2 p3 Creates a circle through
  • Intellij 新的 Java 类打开与平常不同的对话框

    通过创建新的java类时新建 gt Java 类使用时智能集成开发环境 一个随机对话框开始出现 我找不到如何禁用它 这是开始显示的奇怪对话框 有点像向导 单击帮助按钮获取我的帮助There is no help for this dialo
  • 我可以覆盖用 C 编写的 Ruby 方法吗?

    是否可以覆盖 Ruby 本身的方法 例如rb error frozen 用 C 语言编写 带有 Ruby 代码 背景 我想知道当修改冻结对象时 是否可以让 Ruby 仅记录警告 而不引发异常 这样 我可以记录各种状态修改 而不是在第一个发生
  • 从 GitHub 项目导出可用的 .jar 文件

    我对 java 和 eclipse 相当陌生 我想从这个 github 项目中获取 jar 文件 https github com nikkiii omegle api java 我已经尝试在 Eclipse 中这样做 但我无法将项目作为
  • docker 未考虑 docker-compose.yml 中指定的资源限制

    我正在尝试设置资源限制docker compose yml file 这里是 version 3 7 services postgres build docker postgres container name postgres ports
  • 在Python中替换unicode字符串中的非ascii字符

    如何在Python中替换unicode字符串中的非ascii字符 这是我针对给定输入观察的输出 音乐 gt 音乐 纸箱 gt 纸箱 卡诺 gt 卡诺 也许有一个字典 其中 是键 a 是值 如果您只想将重音字符降级为非重音字符 gt gt g
  • 在 Raku 中使用 Perl 5 模块 Data::Printer 的 `show_tied` 选项时,如何关闭它?

    我使用了带有 Perl 的 CPAN Perl 模块 Data Printer DP 效果很好 现在我想在 Raku 代码中使用它 When I use the from
  • Kivy:标签文本在 for 循环期间不会更新

    当我尝试在 for 循环期间更新标签文本时遇到问题 还有类似的条目 例如 运行代码时更新 kivy 小部件的属性 但它们似乎并不完全符合我的问题 或者我错过了重点 我运行以下代码 py from kivy app import App fr
  • C# 创建/修改/读取 .xlsx 文件

    我正在寻找一种在 C 中创建 修改 读取 xlsx 文件的方法 而无需安装 Excel 或在服务器上创建文件 然后再提供给用户下载 我找到了NPOIhttp npoi codeplex com 看起来不错 但支持 xls 而不是 xlsx
  • 32 位字的镜像位

    你会如何在 C 中做到这一点 例如 如果我们必须镜像 8 位 则 10110001 会变为 10001101 某些处理器上是否有任何指令可以简化此任务 它实际上被称为 位反转 通常在 FFT 加扰中完成 O log N 方式是 最多 32
  • perl6 可以在匹配中使用连接吗?

    是否可以使用 junction 来匹配 junction 中的任何值 我想匹配数组中的任何值 正确的做法是什么 lisprog perl6 To exit type exit or D gt my a a a b c gt any a an
  • 检查项目是否已在上下文菜单中[重复]

    这个问题在这里已经有答案了 不久前 我可以在 Google Chrome 扩展中保存上下文菜单中创建的项目的 ID 背景 js var myItem if myItem MyItem myItem chrome contextMenus c
  • 使用 CRON 作业访问 url?

    我有一个网络应用程序 必须执行重复的任务 发送消息和警报 我已经使用脚本页面在浏览器中加载时执行这些任务 即http example com tasks php我通过 iframe 将其包含在我的 Web 应用程序的每个页面中 现在我想改变
  • Android 请求多个权限

    我正在修改现有的面部跟踪器应用程序 Android 的面部识别示例项目 我在请求多个永久权限时遇到问题 下面的方法是现有方法的修改版本 成功创建了一个弹出窗口来请求相机权限 我正在尝试使用存储权限来复制此内容 但到目前为止我还没有成功 并且
  • 如何通过API获取维基百科文章的一小段文字和主图?

    我正在尝试创建一个简单的维基百科克隆 允许用户搜索某个主题 然后显示 10 个包含文章图像和一小段文本的结果 我已经能够将用户提供的搜索字段传递给我的 ajax 打电话没有问题 但现在我无法检索图像 我已经阅读了 StackOverflow
  • 将线程分配给特定的CPU核心

    AFAIK 在 Linux 中可以将线程分配给 CPU 核心 看this 但是 我的问题是我可以使用以下方法实现此功能吗boost如果可能的话 又是如何实现的呢 请注意 操作系统也不能决定哪个对我来说更好 而是假设我想在设计中控制这种行为
  • Java 通过谓词将流拆分为流的流

    我正在阅读数百个大型 6GB gzip 日志文件GZIPInputStream是我想解析的 假设每一项的格式如下 Start of log entry 1 some log details some log details some log
  • 在 BigQuery 中查询多个重复字段

    我有一个架构 其中包含多个未嵌套的重复字段 我正在尝试查询叉积 但出现错误 无法查询重复字段的叉积 如果我只查询 2 个重复字段 我可以将其中之一展平 然而 我有兴趣查询超过 2 个重复字段 并且我无法理解 FLATTEN 语法如何支持这一
  • 如何将 Android Studio 完全安装到非默认 (D:) 驱动器

    我将从高级 常识 问题开始 然后进入技术细节 高级问题 在 Windows 10 中运行 Android Studio 安装程序时 我告诉它安装到 D 驱动器 而不是默认的 C 驱动器 为什么它坚持将某些组件安装到 C 驱动器上 安装到非默
  • 在 Java Web 应用程序中加载外部库

    我的场景如下 我有一个部署到 servlet 容器的 WebApp war 此 WebApp war 在 WEB INF lib 中包含以下库 lib a jar lib b jar 我还有另一个库 例如 lib vendor jar 由于