【问题标题】:Adding external resources to class-path in Tomcat 8在 Tomcat 8 中将外部资源添加到类路径
【发布时间】:2014-06-02 08:21:03
【问题描述】:

我有一个 Tomcat 应用程序,它需要引用一些应用程序外部的属性文件。通常,这些存储在本地计算机上的特定位置,例如 C:\PROJECT_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 中实现同样的功能?

【问题讨论】:

    标签: java tomcat classpath tomcat8


    【解决方案1】:

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

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

    具有此处描述的属性文件的文件夹:

    How to add external resources (properties file) on to the classpath so that war can read?

    【讨论】:

      【解决方案2】:

      又是一个例子:

      请注意里面的 cmets 并注意我使用了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>
      

      【讨论】:

      • 感谢
      【解决方案3】:

      Tomcat 8 migration guide 中有一个关于此的部分,它将指导您使用 resources configuration

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

      VirtualWebappLoader - 替换为映射到 WEB-INF/lib 和 WEB-INF/classes 的 Pre-和 Post-Resources

      您的新 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>
      

      【讨论】:

      • 我在jar 文件的外部目录中添加了我不想在webapps lib driectory 中的文件。我必须使用webAppMount="/WEB-INF/lib" 才能让它工作。您也可以在 xml 中使用变量,例如 ${catalina.base}
      • 你好,迈克尔,我在这里被链接了,因为我的帖子stackoverflow.com/q/47817600/1224441 因为重复而被关闭。但是我不知道如何通过您的回复和您提供的链接解决我的问题。如果你有时间,你能告诉我吗?谢谢。
      猜你喜欢
      • 2013-03-10
      • 1970-01-01
      • 2018-03-29
      • 1970-01-01
      • 2013-03-15
      • 1970-01-01
      • 1970-01-01
      • 2013-07-16
      • 2012-03-14
      相关资源
      最近更新 更多