Java 向Tomcat8中的类路径添加外部资源

Java 向Tomcat8中的类路径添加外部资源,java,tomcat,classpath,tomcat8,Java,Tomcat,Classpath,Tomcat8,我有一个Tomcat应用程序,它需要引用一些应用程序外部的属性文件。通常,它们存储在本地计算机上的特定位置,如C:\PROJECT\u NAME\conf\ 在Tomcat 7中,这可以通过在/META-INF/中放置context.xml文件来实现,该文件使用VirtualWebappLoader将此位置添加到应用程序类路径中,如下所示: <Context> <Loader className="org.apache.catalina.loader.VirtualWe

我有一个Tomcat应用程序,它需要引用一些应用程序外部的属性文件。通常,它们存储在本地计算机上的特定位置,如
C:\PROJECT\u NAME\conf\

在Tomcat 7中,这可以通过在
/META-INF/
中放置
context.xml
文件来实现,该文件使用
VirtualWebappLoader
将此位置添加到应用程序类路径中,如下所示:

<Context>
    <Loader className="org.apache.catalina.loader.VirtualWebappLoader"
        virtualClasspath="/PROJECT_NAME/conf"
        searchVirtualFirst="true" />
</Context>


如何在Tomcat 8中实现这一点?

中有一节将介绍如何使用

特别是,您将创建一个对象,该对象的描述中包含以下文本

VirtualWebappLoader-由映射到WEB-INF/lib和WEB-INF/classes的Pre-and-Post资源替换

新的context.xml将如下所示:

<Context>
    <Resources className="org.apache.catalina.webresources.StandardRoot">
        <PreResources className="org.apache.catalina.webresources.DirResourceSet"
            base="C:\\PROJECT_NAME\\conf"
            internalPath="/"
            webAppMount="/WEB-INF/classes" />
    </Resources>
</Context>

又是一个例子:

请注意里面的注释,并注意我使用了
PostResources
而不是
PreResources
,这样,如果我对“util”实现不满意,我可以重写当前项目中的类。实际上,我不确定
JarResource
是否被视为“PostResource”或“PreResource”,但重写静态内容和类是有效的

    <!--
         https://tomcat.apache.org/tomcat-8.0-doc/config/resources.html
         http://stackoverflow.com/questions/23143697/adding-external-resources-to-class-path-in-tomcat-8
         http://stackoverflow.com/questions/34515852/tomcat-7-application-migration-to-tomcat-8
         http://mikusa.blogspot.co.za/2014/07/tips-on-migrating-to-tomat-8-resources.html
    -->
    <Context path="/MY_PROJECT" docBase="/MY_PROJECT">
        <Resources className="org.apache.catalina.webresources.StandardRoot">
            <!-- Post-load the static content from my util project -->
            <PostResources className="org.apache.catalina.webresources.DirResourceSet"
                    base="/workspace/MY_UTIL_PROJECT/WebContent"
                    webAppMount="/">
            </PostResources>
            <!-- Post-load the classes from my util project -->
            <PostResources className="org.apache.catalina.webresources.DirResourceSet"
                    base="/workspace/MY_UTIL_PROJECT/WebContent/WEB-INF/classes"
                    webAppMount="/WEB-INF/classes">
            </PostResources>
            <!-- Load the JARs contained within my util project -->
            <JarResources className="org.apache.catalina.webresources.DirResourceSet"
                    base="/workspace/MY_UTIL_PROJECT/WebContent/WEB-INF/lib"
                    webAppMount="/WEB-INF/lib">
            </JarResources>
        </Resources>
    </Context>

只需将属性文件复制到Tomcat lib文件夹中即可

或者增强conf/catalina.properties:common.loader

具有用于属性文件的文件夹,如下所述:


我正在添加一个包含
jar
文件的外部目录,我不希望这些文件出现在webapps lib driectory中。我必须使用
webAppMount=“/WEB-INF/lib”
才能让它工作。您还可以在xml中使用变量,例如
${catalina.base}
。您好,Michael,我被链接到这里,因为我的帖子因为重复而关闭。但是我不知道如何用你的回复和你提供的链接来解决我的问题。如果你有时间,能告诉我吗?谢谢