【问题标题】:Specify Apache Tomcat "lib" folder in Maven在 Maven 中指定 Apache Tomcat“lib”文件夹
【发布时间】:2020-02-10 00:07:07
【问题描述】:

Apache Tomcat 9 中,JNDI Resources How-To 页面底部有一个部分,Adding Custom Resource Factories

要编写一个实现JNDI服务提供者javax.naming.spi.ObjectFactory接口的类,文档说:

您需要根据包含 $CATALINA_HOME/lib 目录中所有 JAR 文件的类路径来编译此类。

lib 文件夹包含:

websocket-api.jar
tomcat-jni.jar
tomcat-util-scan.jar
tomcat-util.jar
tomcat-websocket.jar
tomcat-i18n-pt-BR.jar
tomcat-i18n-ru.jar
tomcat-i18n-zh-CN.jar
tomcat-jdbc.jar
tomcat-i18n-ja.jar
tomcat-i18n-ko.jar
tomcat-i18n-cs.jar
tomcat-i18n-de.jar
tomcat-i18n-es.jar
tomcat-i18n-fr.jar
jaspic-api.jar
jsp-api.jar
servlet-api.jar
tomcat-api.jar
tomcat-coyote.jar
tomcat-dbcp.jar
el-api.jar
jasper-el.jar
jasper.jar
catalina-tribes.jar
catalina.jar
ecj-4.12.jar
catalina-ha.jar
catalina-storeconfig.jar
annotations-api.jar
catalina-ant.jar

➥ 在 Maven 驱动的项目中如何满足这个要求?

我当然不希望将所有这些 jar 包捆绑到我的 Web 应用程序生成的 WAR 文件中。

【问题讨论】:

    标签: java maven tomcat servlets catalina


    【解决方案1】:

    文档中真正需要什么有点不清楚,但一般来说,您的pom.xml 中会包含以下内容:

    <dependency>
        <groupId>jndi</groupId>
        <artifactId>jndi</artifactId>
        <version>1.2.1</version>
        <scope>provided</scope>
    </dependency>
    

    关键是provided 范围。这意味着编译需要该库,但不应将其包含在打包中。换句话说,它是由目标部署环境提供的。

    话虽如此,您提供的链接是用于编写自定义资源工厂。它不是.war 文件,而是一个.jar,您可以将其安装到Tomcat 中以对其进行扩展。这就是你所追求的吗?如果您只需要进行 JNDI 查找,那么我提供的 XML 块将适用于您的代码。

    【讨论】:

    • 是的,我想创建一个自定义资源工厂。 Tomcat 9 中用于 JDBC 数据源的默认资源工厂实例化 org.apache.tomcat.dbcp.dbcp2.BasicDataSource。相反,我想要一个 org.postgresql.ds.PGSimpleDataSource 对象,而不是来自池。我希望将它作为我的网络应用程序的一部分,捆绑在 WAR 文件中,而不是单独的 JAR。
    • 其实资源工厂好像已经写好了。我发现经典 Postgres JDBC 驱动程序中内置了 org.postgresql.ds.common.PGObjectFactory 类。这个类实现了关键的javax.naming.spi.ObjectFactory 接口。所以我在这里的问题可能对我自己的情况没有实际意义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-06
    • 2018-01-06
    • 1970-01-01
    • 2012-11-07
    • 1970-01-01
    • 1970-01-01
    • 2012-05-24
    相关资源
    最近更新 更多