我有以下问题:
在我的 Web 应用程序中,其中一个 jar 必须位于 tomcat5.5 $CLASSPATH 中,而不能像其他 jar 位于 WEBAPP/lib 中。
我将其放在 tomcatdir/server/lib 中。(然后放在 tomcatdir/common/lib 中)。没有成功。
如果系统加载器(java)没有加载该jar,我就无法使用该jar提供的所有功能。
确切地说,使用“smb”类型的方案来实例化 URL 类型的变量。
事实上,我正在尝试做以下事情:
http://jcifs.samba.org/src/docs/faq.html#ukproto
有谁遇到过同样的问题?有更多 tomcat 经验吗?
谢谢
安托万
答案1
解决方案分为两部分:
手动将 jcifs jar 添加到 tomcat 类路径(通过明确添加绝对路径到 /ect/init.d/tomcat5.5 )。
还设置以下 java 系统属性:
- java.protocol.handler.pkgs=jcifs
要做到这一点有两个选择
例如,在应用程序启动时,按照源代码进行操作。
Properties prop = System.getProperties(); prop.setProperty("java.protocol.handler.pkgs", "jcifs");
或者在启动或 TOMCAT(不是应用程序)时使用 java -Djava.protocol.handler.pkgs=jcifs。请参阅 tomcat 启动脚本,变量就是为此而设的。(JAVA_OPT)
答案2
如果您已确认它没有被加载到您的类路径中(即通过调试器或其他方法),您可能必须将其放在 $JDK_HOME/jre/lib 目录中,以确保系统类加载器使用 VM 加载它。
或者,如果您想要访问 CIFS 文件系统,则可以使用 Apache Commons VFS 项目。它是许多不同文件系统的包装器,我已在自己过去的许多项目中成功使用它。我从未遇到任何困难,只需将其放在 $CATALINA_HOME/common/lib 目录中(其中 $CATALINA_HOME 是您的 Tomcat 目录)。不过我应该警告您,CIFS 模块目前处于孵化阶段。