[英]how to add an xml file to the java application's classpath in eclipse?
[英]How to add /usr/share/java libs to webapp's classpath?
在linux + tomcat5.5上部署的webapps可以自动使用/查看所有/usr/share/java/
jars吗?
我正在为Ubuntu打包我的java webapp(但问题与任何基于linux的发行版有关)并且要使它依赖于tomcat。
我将把上下文描述符(一个xml文件)放到/usr/share/tomcat5.5/conf/Catalina/localhost/
来部署我的应用程序。 我的web目录在这里: /usr/share/<appname>/web
,如何让我的应用程序使用系统中安装的java jar库( /usr/share/java
)?
我不能只是symlink /usr/share/java -> <webdir>/WEB-INF/lib
,因为我的自定义jar需要放在lib
目录中。
到目前为止我找到的解决方案是将每个必需的jar符号链接到<webdir>/WEB-INF/lib/
。
这不是很好,因为我必须符号链接很多jar,甚至更糟糕的是符号链接我的直接依赖lib(jar)所需的所有jar(依此类推)。 如果我的直接依赖库lib更改了所需的jar列表,我将不得不维护该符号链接。
根据Tomcat类加载文档 ,您需要在$ CATALINA_BASE / shared / lib库中放置任何应该对所有Tomcat应用程序可用的共享库 - 所以一种方法来执行您要执行的操作是移动库从/ usr / share / java到$ CATALINA_BASE / shared / lib。
如果我没有误解相同的文档,那么Tomcat也会在启动时使系统范围的CLASSPATH变量的内容可供类加载器使用,所以如果您的目录 - / usr / share / java - 包含在系统范围的CLASSPATH中变量,然后它也应该工作。 但我从来没有这样做过; Tomcat使Tomcat范围内的$ CATALINA_BASE / shared / lib内容的方法一直很完美。
entzik的回答引导我找到以下解决方案。
我将使用修改后的“糟糕解决方案”(参见问题)。
修改如下:
如果管理员安装了新版本的库(例如commons-io),则此修改可确保webapp不会中断。
缺点是这种方法明显地使系统只使用一个应用程序版本的库,并且可能导致一些其他应用程序/库因版本冲突而无法安装的问题。 我想如果我们谈论图书馆,那么两个潜在的问题都很小。
你有两个选择,一个是让类加载器为所有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”。
你不应该这样做。 Java EE应用程序应该是自给自足的,并且不依赖于除容器提供的资源之外的部署包之外的任何资源。 因此,您应该从该目录中获取所需的库,并将其添加到war或ear包中。
这可以保证您的应用程序在部署它的任何地方都会表现相同,并且您不会在/ usr / share / java中的lib版本中发生意外更改....
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.