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

标签 java tomcat servlets classloader

我的场景如下:

我有一个部署到 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,您可以利用 VirtualWebappLoader .

添加一个META-INF/context.xml

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

另请记住,virtualClasspath 属性必须是绝对路径,如以下评论中正确指出的那样。

关于java - 在 Java Web 应用程序中加载外部库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13704915/

相关文章:

java - 获取特定值的数组索引

java - 使用 Gradle 监听器有哪些额外好处?比 TestNG 有更多好处吗?

ios - 尝试调用 Web 服务方法时从 NSURLResponse 返回的错误数据

php - 在单个 EC2 实例上安装 Tomcat 和 PHP 服务器是一个好习惯吗

postgresql - Docker Compose (TOMCAT + POSTGRES) - Spring Boot 应用程序 : connection issue between containers

java - 无论 HttpServlet 如何,如何保持服务器上的数据库连接处于 Activity 状态

java - 简单的 JOGL 游戏在 gtx 470 上运行非常缓慢

java - 如何将物体缓慢平移到某个位置(以便可以看到)

java - 使用 Servlet 连接到 DB2 数据库

servlets - 在 Java Servlet 中转发请求时出现无限循环