$ CATALINA_HOME / shared / lib是Tomcat中的真实功能吗?

问题描述 投票:0回答:1

Apache Tomcat中,我看到了一些引用路径$CATALINA_HOME/shared/lib的帖子。

[下载Tomcat时,我看不到Tomcat主文件夹中嵌套的shared文件夹。

我确实看到一个$CATALINA_HOME/lib路径,一个嵌套在Tomcat主文件夹中的lib文件夹。我了解这是不应在Tomcat中的“上下文”(Web应用程序)之间复制的JAR文件的适当位置。 JDBC drivers是这种情况的重要示例。

问题是,Tomcat用许多JAR填充了$CATALINA_HOME/lib文件夹以供自己使用。因此,为使整洁和易于管理起见,最好有另一个文件夹,除了Tomcat自己的JAR之外,除了我们添加的JAR之外,什么都没有。因此,我可以理解对$CATALINA_HOME/shared/lib之类的东西的需求。

问题是:

  • ((a)我看不到shared文件夹,
  • (b)我找不到有关此文件夹的任何文档。

➥这是shared/lib的真实功能,并且我应该创建这对文件夹嵌套在Tomcat主文件夹中吗?

$CATALINA_HOME/shared/lib未公开的功能,也许只是将来更新中可能会消失的黑客?

我专门要求Tomcat 9。但是Tomcat 8仍然很常用,因此其他人也可以从中得到答案。

tomcat jdbc shared-libraries admin lib
1个回答
0
投票

TL;博士

是的,这是一个真实的功能。

您可以在最想要收集要在Tomcat内的一个或多个Web应用程序之间共享的JAR文件的任何位置创建一个文件夹。

通过编辑catalina.properties文件使Tomcat使用该文件夹,以将值分配给名为shared.loader的属性。

共享类加载器

您指的是Tomcat的shared loader功能。

正如您提到的,某些具有JDBC驱动程序的JAR不应在Tomcat实例中的多个Web应用程序之间分别复制。该主题已在堆栈溢出上discussed many times

此类JAR应该由共享的Java Class Loader加载,而不是按Web应用程序类加载器加载。

catalina.properties文件

我不了解Tomcat的主要文档。但是,此问题在$CATALINA_HOME/conf/catalina.properties文件中的注释中进行了简要讨论。根据其Apache许可2条款摘录:

#
# List of comma-separated paths defining the contents of the "shared"
# classloader. Prefixes should be used to define what is the repository type.
# Path may be relative to the CATALINA_BASE path or absolute. If left as blank,
# the "common" loader will be used as Catalina's "shared" loader.
# Examples:
#     "foo": Add this folder as a class repository
#     "foo/*.jar": Add all the JARs of the specified folder as class
#                  repositories
#     "foo/bar.jar": Add bar.jar as a class repository
# Please note that for single jars, e.g. bar.jar, you need the URL form
# starting with file:.
#
# Note: Values may be enclosed in double quotes ("...") in case either the
#       ${catalina.base} path or the ${catalina.home} path contains a comma.
#       Because double quotes are used for quoting, the double quote character
#       may not appear in a path.
shared.loader=

注意该shared.loader属性的默认值为空白。正如评论所解释的那样,Tomcat将回退到使用其“公共加载器”,该加载器从Catalina Home文件夹中的lib文件夹以及Catalina Base文件夹中的lib文件夹(某些人将其定义为文件夹位于Tomcat文件夹之外,以便于管理)。

创建并指定您自己的JAR文件夹

您可以自由指定任何文件夹来保存您的JAR文件,以便Tomcat通过其“共享加载程序”进行访问(前提是运行Tomcat的系统用户帐户具有该文件夹的file system privileges)。 AFAIK,创建嵌套的shared/lib文件夹只是惯例。

在Tomcat文件夹内

如果您想将Tomcat文件夹用于$CATALINA_HOME/shared/lib

  1. 创建sharedlib文件夹对(具有适当的文件系统特权)。
  2. 编辑$CATALINA_HOME/conf/catalina.properties以将shared.loader=替换为:shared.loader="${catalina.home}/shared/lib","${catalina.home}/shared/lib/*.jar"

请注意,我们如何按照上述引用的说明使用双引号。对于类文件,我们只指定了lib;对于JAR文件,我们只指定了lib/*.jar

Tomcat文件夹外

如果您是选择将Web应用程序保存在Tomcat文件夹的文件夹[[outside中的人之一,则您将catalina.base定义为该外部文件夹。在这种情况下,您可能也希望将共享的JAR文件也保存在这里,而不是保存在Tomcat文件夹中。因此,您可能希望在此处创建您的shared/lib。引用那些引用注释中的示例:

    在外部文件夹中创建一对sharedlib文件夹(具有适当的文件系统特权)。
  1. 编辑$CATALINA_HOME/conf/catalina.properties以将shared.loader=替换为:shared.loader="${catalina.base}/shared/lib","${catalina.base}/shared/lib/*.jar"
  • 注意我们如何使用catalina.base而不是catalina.home

    都在Tomcat文件夹之外的

  • 内部。您可以指定同时在Tomcat文件夹(“ home”)和Tomcat文件夹(“ base”)之外查看/shared/lib文件夹。

    同时使用.base.home

    shared.loader="${catalina.base}/shared/lib","${catalina.base}/shared/lib/*.jar","${catalina.home}/shared/lib","${catalina.home}/shared/lib/*.jar"


    如果使用Maven来驱动Java项目,则需要编辑POM文件以为特定的JDBC driver设置依赖项。在该<dependency>元素中,您需要将<scope>设置为provided值,以避免将JDBC驱动程序的副本捆绑在网络应用的WAR文件中。参见this Answer


    This old Tomcat wiki page简要提到了创建shared/lib文件夹,然后编辑catalina.properties文件以为名为shared.loader的属性定义值的相同技术。

    © www.soinside.com 2019 - 2024. All rights reserved.