摘要

是,可能webapp部署在linux+tomcat5.5使用/见所有的 /usr/share/java/ 罐子自动?

详细信息

我打包我java webapp为Ubuntu(但问题是相关的任何基于linux发行版),要使它取决于tomcat。

我要把上下文描述(xml文件) /usr/share/tomcat5.5/conf/Catalina/localhost/ 让我的应用程序的部署。有我的网dir在这里: /usr/share/<appname>/web, 我怎么使我应用程序使用java罐的库安装了该系统(/usr/share/java)?

我不能只symlink /usr/share/java -> <webdir>/WEB-INF/lib, 因为我有我的自罐子需要被放置在 lib dir。

糟糕的解决方案

解决我发现迄今为止是符号连接的每一个必需的罐子 <webdir>/WEB-INF/lib/.

这不是那么好,因为我必须symlink很多罐和更糟糕的是,以连接所有的罐子我直接依赖lib(罐子)要求(等等)。在情况我的直接依赖lib改变其名单所需的罐子我会必须保持这一链接.

有帮助吗?

解决方案

你不应该这样做。Java EE应用程序都应该是自给自足并不依赖于任何外部资源的部署包比其他提供的那些容器。所以你应该把libs你需要从该目录,并将其添加到你的战争或耳包。

这可以保证应用程序的行为相同的,无论部署它和您不会受到意想不到的变化版本的libs/usr/share/java。...

其他提示

根据 在Tomcat类加载文档, 你需要把任何共享库,应提供给所有Tomcat应用程序在$CATALINA_BASE/shared/lib库--这样一种方式做什么你想要做的就是动动你的图书馆/usr/share/java美元CATALINA_BASE/shared/lib.

但如果我没有误解,认同的文件,Tomcat也使得全系统的类路径变量的内容提供给类装入器在发射的,所以,如果你的目录--/usr/share/java--包括在全系统类路径变,那么应该的工作。我从来没有这样做,虽然;Tomcat的方法制作的内容$CATALINA_BASE/shared/lib提供Tomcat范围一直担任我的完美。

entzik的答案,导致我到下面的解决方案。

我会使用改良的"坏的解决方案"(见问题)。

修改如下:

  1. 取决于具体包装版本的所有依赖关系(影响到"控制"的文件同时包装deb)
    例如: libcommons-io-java(=1.3.1) 而不是只是 libcommons-io-java
  2. Symlink实际罐子里文件`/usr/share/java`,而不是"广义"的
    例如:
    webdir/WEB-INF/lib/commons-io.jar ->/usr/share/java/commons-io-1.3.1.jar
    而不
    webdir/WEB-INF/lib/commons-io.jar ->/usr/share/java/commons-io.jar

这种修改确保网络应用程序是不破坏,如果管理员安装了新版本的图书馆(公共-io为例)。

缺点是这种做法明显的膨胀系统使用的唯一程序版本的图书馆,并可能导致问题的一些其他应用程序/图书馆不能安装,由于版本的冲突。我猜这两个潜在的问题是次要的,如果我们来说关于库。

你有两个选择,一是让这类装入器提供的图书馆向所有java程序和其他要让类装入器提供的图书馆向所有tomcat的情况。

加入你的链接to/usr/lib/jvm/java的升级到1.5.0-太阳-1.5.0.11/java运行环境/lib(注意可能需要指定不同的版本在这条道路)以允许所有java程序访问这些图书馆或把它们添加到Tomcat的共享图书馆在var/lib/tomcat5.5/shared/libs(再次,该版本数量可以是不同的)访问过的所有Tomcat的情况。

我还应该注意到,这些目录的地点都是从Ubuntu"活跃".

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top