我有四个不同的项目,我正在使用 Weblogic 来部署我的项目。有几个库(jar 文件)对于所有项目都是通用的。目前我的每个项目都有lib目录并且有几乎相同的库集。现在,是否可以在 WAR 文件之外拥有这个 lib 目录并访问它们。
7 回答
抵制将 jar 文件放在容器的“共享”文件夹中的诱惑。最好将 jar 文件保存在它们现在所在的位置。现在使用共享文件夹可能听起来不错,但将来您可能需要部署一个需要共享库但版本不同的应用程序。
话虽如此,我没有使用 WebLogic 的经验。在 Tomcat 中有一个共享文件夹,其中包含所有已部署应用程序通用的库。使用它不是一个好主意。如果可以将 WebLogic 配置为每个应用程序集(而不是所有已部署的应用程序)使用一个共享文件夹,那么您可以使用它。
你想这样做吗?除非您被困在部署空间中,否则我会(也许)建议不要这样做。
为什么 ?目前,您有 4 个解决方案正在运行这些库。如果您必须升级其中一个库(例如,如果您发现了一个错误,或者如果您需要一个新功能),那么您将不得不测试所有 4 个解决方案的兼容性和功能。如果每个解决方案都有自己的一组库,那么它们是沙盒化的,您不必逐步移动所有 4 个库。
请注意,所有这一切都取决于回归测试解决方案的难易程度。您可能会发现这很容易,在这种情况下使用同一组库是可行的。
不要那样做。
WAR 文件的整体理念是它们是独立的单元。这使得部署变得更加容易。
除了其他人指出的可能的版本冲突之外,将 jar 文件放在 /shared 中可能会对类可见性产生非常嵌套的后果。它们将位于单独的类加载器上,并且无法查看 WAR 文件中的类。如果您使用依赖 Class.forName() 工作的库(并且有很多),这可能会非常痛苦。
如果你真的,真的买不起额外的磁盘空间和内存,看看 OSGi 或 Spring DM。他们已经解决了这个问题,但代价是增加了复杂性。
将所有共享的jar文件放在weblogic的common\lib文件夹下。所有已部署的应用程序都可以访问 common\lib。
首先,您可以将所有库放在同一个地方,并让您的构建过程导入所需的库。
在部署时,新的 Weblogic 10 在每个域中都有一个 lib 文件夹,您可以在其中放置共享库。我认为在 Weblogic 10 之前这是不可能的
您可以将 jars 放在它们自己的 ear 文件中,并将其部署为共享库。
您还可以将战争放在耳边,并将共享 jar 添加到 APP-INF/lib。这是 J2EE 的 Weblogic 扩展,因此它不能在其他服务器上工作。
我目前正在使用另一种方法。
- 创建一个中央存储库文件夹并将所有常用库放在那里。
- 在每个项目中,您可以创建对所有需要的库的引用。在 Subversion 中,它适用于外部
每次,本地工作副本都会更新,外部文件也会更新,因此您只需提交到中央文件夹,它就会自动分发到所有项目。