2009-08-19 163 views
60

我在C:驅動器中有一個文件夾爲C:\app_config\java_app 此文件夾包含一些特定於語言環境的屬性文件。將目錄添加到tomcat類路徑

我有一個加載基於默認的語言環境上的web App.My Web應用程序的啓動屬性文件正在運行的tomcat裏面一個Java類(PrjPropertilesLocator)。 問題是我應該如何在tomcat類路徑中設置這個目錄C:\app_config\java_app,以便PrjPropertilesLocator類中的ResourceBundle可用。 有沒有一種方法可以設置此文件夾專門針對需要它的單個Web應用程序。我不想將屬性文件放在WEB-INF/classes文件夾中。

在weblogic上,它運行的很好。我在其啓動腳本之一中設置了weblogic classpath中的目錄,它工作正常。 但在Tomcat上,我試圖把它放在startup.batsetclasspath.bat,但沒能成功。

+1

剛上這個鏈接HTTP閱讀://www.chemaxon .com/jchem/doc/admin/tomcat.html,那個tomcat並沒有使用系統classpath.I將所有文件從C:/ app_config/java_app複製到/lib文件夾並且它工作正常。看起來像tomcat doestnot use system classpath.Can我們可以在tomcat啓動文件中設置文件夾C:\ app_config \ java_app。 – Rajat 2009-08-19 16:34:32

+2

http://tomcat.apache.org/tomcat-5.5-doc/class-loader-howto.html – jack 2010-11-06 16:07:35

回答

109

只是在/conf/catalina.propertiesshared.loadercommon.loader財產指定。

+9

我想知道是否有一種方法可以使用命令行參數來指定其中的任何一種。這將非常方便,因爲我不需要修改任何Tomcat文件以使其正常工作... – 2012-02-11 19:59:31

+4

我花了數小時尋找這個解決方案。 BalusC又一次通過了。 – Rhys 2013-02-13 06:33:33

+1

作爲一篇很好的相關文章,人們可能會對[瞭解Tomcat類路徑 - 常見問題以及如何修復它們](https://www.mulesoft.com/tcat/tomcat-classpath)感興趣。 – DuffJ 2015-05-06 14:00:38

12

在Tomcat 6中,環境中的CLASSPATH將被忽略。在你的setclasspath.bat會看到

set CLASSPATH=%JAVA_HOME%\lib\tools.jar 

然後在catalina.bat中,它的使用像這樣

%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% 
-Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" 
-Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" 
-Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION% 

我沒有看到所包含的任何其他增值經銷商,所以我覺得你堅持編輯setclasspath.bat並更改CLASSPATH的構建方式。對於Tomcat 6.0.20,這種變化是對的的setclasspath.bat像74

set CLASSPATH=C:\app_config\java_app;%JAVA_HOME%\lib\tools.jar 
4

我建議你做什麼是添加META-INF目錄與MANIFEST.MF文件中.war文件。

請注意,根據Servlet規範,它必須是一個.war文件,而不是的.war目錄中META-INF/MANIFEST.MF由容器讀取。

編輯MANIFEST.MF類路徑屬性C:\app_config\java_app

Using JAR Files: The Basics (Understanding the Manifest)

享受。

+0

嗯,它不適合我。請注意放置的源代碼:您可能需要從JAR文件中引用其他JAR文件中的類。這種方式可能適用於'jar',但不適用於我的web應用程序。 – FaithReaper 2016-03-08 12:57:34

20

參見問題:Can I create a custom classpath on a per application basis in Tomcat

的Tomcat 7 Context持有Loader元素。據docs部署描述符(什麼<Context>標籤)可以被放置在:

  • $CATALINA_BASE/conf/server.xml - 壞 - 需要重新啓動服務器,以重新讀取配置
  • $CATALINA_BASE/conf/context.xml - 壞 - 在所有應用程序
  • $CATALINA_BASE/work/$APP.war:/META-INF/context.xml共享 - 不好 - 需要重新打包,以便更改配置
  • $CATALINA_BASE/work/[enginename]/[hostname]/$APP/META-INF/context.xml - 不錯,但看最後一個選項!
  • $CATALINA_BASE/webapps/$APP/META-INF/context.xml - 不錯,但看最後一個選項!
  • $CATALINA_BASE/conf/[enginename]/[hostname]/$APP.xml - 最好 - 完全不在應用程序中,並自動掃描更改!

這裏我的配置它演示瞭如何使用項目文件的開發版本出來$CATALINA_BASE層次的(請注意,我這個文件放到src/test/resources DIR和intruct Maven的預處理${basedir}佔位符通過pom.xml<filtering>true</filtering>因此,建立在新的環境後,我它複製到$CATALINA_BASE/conf/Catalina/localhost/$APP.xml):

<Context docBase="${basedir}/src/main/webapp" 
     reloadable="true"> 
    <!-- http://tomcat.apache.org/tomcat-7.0-doc/config/context.html --> 
    <Resources className="org.apache.naming.resources.VirtualDirContext" 
       extraResourcePaths="/WEB-INF/classes=${basedir}/target/classes,/WEB-INF/lib=${basedir}/target/${project.build.finalName}/WEB-INF/lib"/> 
    <Loader className="org.apache.catalina.loader.VirtualWebappLoader" 
      virtualClasspath="${basedir}/target/classes;${basedir}/target/${project.build.finalName}/WEB-INF/lib"/> 
    <JarScanner scanAllDirectories="true"/> 

    <!-- Use development version of JS/CSS files. --> 
    <Parameter name="min" value="dev"/> 
    <Environment name="app.devel.ldap" value="USER" type="java.lang.String" override="true"/> 
    <Environment name="app.devel.permitAll" value="true" type="java.lang.String" override="true"/> 
</Context> 

UPDATETomcat 8 change syntax for<Resources><Loader>元素,相應的部分現在的樣子:

<Resources> 
    <PostResources className="org.apache.catalina.webresources.DirResourceSet" 
        webAppMount="/WEB-INF/classes" base="${basedir}/target/classes" /> 
    <PostResources className="org.apache.catalina.webresources.DirResourceSet" 
        webAppMount="/WEB-INF/lib" base="${basedir}/target/${project.build.finalName}/WEB-INF/lib" /> 
</Resources> 
1

您可以創建內部雄貓bin目錄中的新文件,setenv.sh(或setenv.bat),並添加以下行有

export CLASSPATH=$CLASSPATH:/XX/xx/PATH_TO_DIR