2009-08-19 93 views
60

Tôi có một thư mục trong ổ C: C:\app_config\java_app Thư mục này chứa một số tệp thuộc tính cụ thể của ngôn ngữ.Thêm thư mục vào đường dẫn tomcat

Tôi có một lớp java (PrjPropertilesLocator) tải các tệp thuộc tính dựa trên ngôn ngữ mặc định khi khởi động ứng dụng web App.My web đang chạy bên trong tomcat. Vấn đề là làm thế nào tôi nên thiết lập thư mục này C:\app_config\java_app trong classpath tomcat để điều này trở nên có sẵn cho ResourceBundle bên trong lớp PrjPropertilesLocator. Có cách nào tôi có thể đặt thư mục này đặc biệt cho một ứng dụng web đơn cần nó. Tôi không muốn đặt các tệp thuộc tính bên trong thư mục WEB-INF/classes.

Trên weblogic này chạy tốt. Tôi thiết lập thư mục bên trong classpath weblogic trong một trong các kịch bản khởi động của nó và nó hoạt động tốt. Nhưng trên Tomcat tôi đã thử đặt nó trong startup.bat cũng trong setclasspath.bat, nhưng không thể làm như vậy thành công.

+1

Chỉ cần đọc vào liên kết này http: //www.chemaxon .com/jchem/doc/admin/tomcat.html, mà tomcat doesnot sử dụng classpath.I hệ thống sao chép tất cả các tập tin từ C:/app_config/java_app để /lib thư mục và nó làm việc.Nhìn như tomcat doestnot sử dụng hệ thống classpath. Chúng ta có thể thiết lập thư mục C: \ app_config \ java_app bên trong một trong những file khởi động tomcats. – Rajat

+2

http://tomcat.apache.org/tomcat-5.5-doc/class-loader-howto.html – jack

Trả lời

109

Chỉ định địa chỉ trong shared.loader hoặc common.loader thuộc tính của /conf/catalina.properties.

+9

Tôi tự hỏi liệu có cách nào để chỉ định bất kỳ cách nào trong số này sử dụng các tham số dòng lệnh hay không. Nó sẽ rất tiện dụng vì tôi không phải sửa đổi bất kỳ tệp Tomcat nào để làm việc này ... –

+4

Tôi đã dành hàng giờ tìm kiếm giải pháp này. Một lần nữa BalusC đã đi qua. – Rhys

+1

Mọi người có thể quan tâm đến [Tìm hiểu về Classpath Tomcat - Các vấn đề thường gặp và cách khắc phục chúng] (https://www.mulesoft.com/tcat/tomcat-classpath) như một bài viết có liên quan tuyệt vời. – DuffJ

12

Trong Tomcat 6, CLASSPATH trong môi trường của bạn bị bỏ qua. Trong setclasspath.bat bạn sẽ thấy

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

sau đó trong catalina.bat, nó được sử dụng như vậy

%_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% 

Tôi không thấy bất kỳ vars khác được bao gồm, vì vậy tôi nghĩ rằng bạn đang bị mắc kẹt với chỉnh sửa setclasspath.bat và thay đổi cách CLASSPATH được xây dựng. Đối với Tomcat 6.0.20, sự thay đổi này là tiếp tục như thế 74 của setclasspath.bat

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

Những gì tôi đề nghị bạn làm là thêm một thư mục META-INF với một tập tin trong tập tin MANIFEST.MF .WAR.

Xin lưu ý rằng theo thông số kỹ thuật servlet, nó phải là tệp .war chứ không phải thư mục .war cho số META-INF/MANIFEST.MF để được đọc theo vùng chứa.

Sửa MANIFEST.MF Lớp-Path tài sản để C:\app_config\java_app:

Xem Using JAR Files: The Basics (Understanding the Manifest)

Thưởng thức.

+0

Vâng, nó không hoạt động đối với tôi. Lưu ý các nguồn được đưa vào: Bạn có thể cần tham chiếu các lớp trong các tệp JAR khác từ bên trong tệp JAR. Cách này có thể hoạt động cho 'jar', nhưng không hoạt động cho ứng dụng web của tôi. – FaithReaper

20

Xem thêm câu hỏi: Can I create a custom classpath on a per application basis in Tomcat

Tomcat 7 Context giữ Loader phần tử. Theo docs deployment descriptor (những gì trong <Context> tag) có thể được đặt trong:

  • $CATALINA_BASE/conf/server.xml - xấu - yêu cầu khởi động lại máy chủ để đọc lại cấu hình
  • $CATALINA_BASE/conf/context.xml - xấu - chia sẻ trên tất cả các ứng dụng
  • $CATALINA_BASE/work/$APP.war:/META-INF/context.xml - xấu - yêu cầu đóng gói lại để thay đổi cấu hình
  • $CATALINA_BASE/work/[enginename]/[hostname]/$APP/META-INF/context.xml - đẹp, nhưng xem tùy chọn cuối cùng !!
  • $CATALINA_BASE/webapps/$APP/META-INF/context.xml - đẹp, nhưng xem tùy chọn cuối cùng !!
  • $CATALINA_BASE/conf/[enginename]/[hostname]/$APP.xml - tốt nhất - hoàn toàn không có ứng dụng và tự động được quét để thay đổi !!!

Đây cấu hình của tôi mà chứng minh làm thế nào để sử dụng phiên bản phát triển các tập tin dự án ra khỏi $CATALINA_BASE hệ thống phân cấp (lưu ý rằng tôi đặt file này vào src/test/resources dir và intruct Maven preprocess ${basedir} placeholders qua pom.xml<filtering>true</filtering> nên sau khi xây dựng trong môi trường mới tôi sao chép nó vào $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> 

CẬP NHẬTTomcat 8 change syntax for<Resources><Loader> yếu tố, tương ứng với phần bây giờ nhìn như:

<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

Bạn có thể tạo một tập tin mới, setenv.sh (hoặc setenv.bat) bên trong thư mục Tomcat bin và thêm dòng sau đây có

export CLASSPATH=$CLASSPATH:/XX/xx/PATH_TO_DIR 
Các vấn đề liên quan