部署在linux + tomcat5.5上的webapps可以自动使用/查看所有/usr/share/java/
个罐子吗?
我正在为Ubuntu打包我的java webapp(但这个问题与任何基于linux的发行版有关)并且要使它依赖于tomcat。
我要将上下文描述符(xml文件)放到/usr/share/tomcat5.5/conf/Catalina/localhost/
以部署我的应用程序。
在我的网站目录:/usr/share/<appname>/web
,如何让我的应用程序使用系统中安装的java jar库(/usr/share/java
)?
我不能只是符号链接/usr/share/java -> <webdir>/WEB-INF/lib
,因为我的自定义广告需要放在lib
目录中。
到目前为止我找到的解决方案是将每个必需的jar符号链接到<webdir>/WEB-INF/lib/
。
这不是很好,因为我必须符号链接很多jar,甚至更糟糕的是符号链接我的直接依赖lib(jar)所需的所有jar(依此类推)。如果我的直接依赖库lib更改了所需的jar列表,我将不得不维护该符号链接。
答案 0 :(得分:2)
根据the Tomcat classloading documentation,你需要在$ CATALINA_BASE / shared / lib库中放置任何应该对所有Tomcat应用程序可用的共享库 - 所以一种方法来做你想做的事情就是将库从/ usr / share / java移动到$ CATALINA_BASE / shared / lib。
如果我没有误解相同的文档,那么Tomcat也会在启动时使系统范围的CLASSPATH变量的内容可供类加载器使用,所以如果您的目录 - / usr / share / java - 包含在系统中全范围的CLASSPATH变量,那么它也应该工作。但我从来没有这样做过; Tomcat使Tomcat范围内的$ CATALINA_BASE / shared / lib内容的方法一直很完美。
答案 1 :(得分:1)
entzik的回答引导我找到以下解决方案。
我将使用修改后的“糟糕解决方案”(见问题)。
修改如下:
如果管理员安装了新版本的库(例如commons-io),则此修改可确保不会破坏webapp。
缺点是这种方法明显地使系统只使用一个应用程序版本的库,并且可能导致一些其他应用程序/库因版本冲突而无法安装的问题。如果我们谈论图书馆,我想这两个潜在的问题都很小。
答案 2 :(得分:0)
你有两个选择,一个是让类加载器为所有java程序提供库,另一个是让类加载器为所有tomcat上下文提供库。
将符号链接添加到/usr/lib/jvm/java-1.5.0-sun-1.5.0.11/jre/lib(注意您可能需要在此路径中指定其他版本)以允许所有Java程序访问这些库或将它们添加到Tomcat的共享库中var / lib / tomcat5.5 / shared / libs(同样,版本号可能不同),以供所有Tomcat上下文访问。
我还应该注意,这些目录位置来自Ubuntu“Feisty”。
答案 3 :(得分:-2)
你不应该这样做。 Java EE应用程序应该是自给自足的,并且不依赖于除容器提供的资源之外的部署包之外的任何资源。因此,您应该从该目录中获取所需的库,并将其添加到war或ear包中。
这可以保证您的应用程序在部署它的任何地方都会表现相同,并且您不会在/ usr / share / java ....中的lib版本中发生意外更改。