如何为多个Java Web项目使用公共库

时间:2009-06-30 09:52:01

标签: java java-ee weblogic

我有四个不同的项目,我正在使用Weblogic来部署我的项目。有几个库(jar文件)对所有项目都是通用的。目前我的每个项目都有 lib 目录,并且具有几乎相同的库集。现在,是否可以将此lib目录放在WAR文件之外并访问它们。

7 个答案:

答案 0 :(得分:8)

抵制将jar文件放入容器的“shared”文件夹的诱惑。最好将jar文件保存在现在的位置。现在使用共享文件夹可能听起来不错,但将来您可能需要部署需要共享库但不同版本的应用程序。

话虽这么说,我没有使用WebLogic的经验。在Tomcat中,有一个共享文件夹,其中包含所有已部署应用程序的通用库。使用它不是一个好主意。如果可以将WebLogic配置为按照一组应用程序(而不是所有已部署的应用程序)使用共享文件夹,则可以使用它。

答案 1 :(得分:3)

你想这样做吗?除非你因为部署空间而陷入困境,否则我(或许)会建议反对它。

为什么?目前,你有4个解决方案来运行这些库。如果您必须升级其中一个库(例如,如果您发现错误,或者您需要新功能),那么您将不得不测试所有4个解决方案的兼容性和功能。如果每个解决方案都有自己的一组lib,那么它们就是沙盒,你不必一步一步地移动所有的。

请注意,所有这一切都取决于回归测试解决方案的难易程度。您可能会发现它很容易,在这种情况下使用相同的lib集是可行的。

答案 2 :(得分:2)

不要那样做。

WAR文件的整体思想是它们是独立的单元。这使部署变得更加容易。

除了其他人指出的可能的版本冲突之外,将jar文件放入/ shared可能会对类可见性产生非常嵌套的后果。它们将位于单独的类加载器上,并且无法查看WAR文件中的类。如果你使用依赖于Class.forName()的库来工作(并且有很多),这可能会非常痛苦。

如果真的,真的无法承受OSGi或Spring DM的额外磁盘空间和内存。他们已经解决了这个问题,但代价是增加了复杂性。

答案 3 :(得分:1)

将所有共享jar文件放在weblogic的common \ lib文件夹下。所有已部署的应用程序都可以访问common \ lib。

答案 4 :(得分:0)

首先,您可以将所有库放在同一个地方,并让您的构建过程导入所需的库。

for for deploy新的Weblogic 10在每个域中都有一个lib文件夹,您可以在其中放置共享库。我不认为在Weblogic 10之前这是可能的

答案 5 :(得分:0)

您可以将jar放在自己的ear文件中,并将其部署为共享库。

您还可以将战争放在耳中并将共享的jar添加到APP-INF / lib。这是J2EE的Weblogic扩展,因此它不适用于其他服务器。

答案 6 :(得分:-1)

我目前正在使用另一种方法。

  1. 创建一个中央存储库文件夹,并将所有公共库放在那里。
  2. 在每个项目中,您可以创建对所有所需库的引用。在Subversion中,它适用于externals
  3. 每次更新本地工作副本,外部更新为,所以您只需要提交到中央文件夹,它就会自动分发到所有项目。