【问题标题】:Reasons to use WEB-INF/lib over EAR's lib?使用 WEB-INF/lib 而不是 EAR 的 lib 的原因?
【发布时间】:2013-01-17 17:39:32
【问题描述】:

我正在重新考虑我一直认为理所当然的事情。即,在具有以下结构的 EAR 中:

EAR
 \-- boo-ejb.jar
 \-- foo-web.war
 |    \--WEB-INF
 |          \--lib
 \--lib

.. 我想我理解正确的是 WEB-INF/lib 用于 jars 仅由 Web 应用程序和 EAR 级 lib 也用于 ejb.jar 所需的 jars。基本原理是以某种方式使依赖关系更清晰。但是,为什么不直接转储 EAR 级 lib 文件夹中的所有内容呢?当然,如果存在某种冲突,我们希望了解并深入调查。那不是更干净的解决方案,更不容易掩盖潜在的兼容性/依赖性不匹配问题吗?

【问题讨论】:

    标签: jakarta-ee war ear


    【解决方案1】:

    你说得对——它会更清晰,更不容易出现依赖不匹配的错误。

    但是……

    如果您不在 EAR 中分发 Web 应用程序,该怎么办?你会把库放在哪里?您将如何在不同的 EAR 中分发您的 webapp,以便您可以基于一组 webapp 编写企业应用程序?

    WEB-INF/lib 也适用于只能包含资源(其中没有类)的 jar。然后,您会将面向 Web 的资源 jar 放入 EAR 级别的库中吗?我不这么认为。

    也许有更多的理由使用 WEB-INF/lib 而不是 EAR 的 lib,但上述两/三种情况至少应该足以说服您重新考虑管理库的策略。

    【讨论】:

      【解决方案2】:

      在 EAR 文件中,EAR 级别的 lib 文件夹跨所有 Web 应用程序(即 EAR 中的所有 .war)。 .war 中的 lib 用于仅对 web-app war 可用的库。

      很多时候,您必须将特定库提升到 EAR 级别并设置类路径加载器首选项优先级设置(在提供的应用程序服务器和提供的 EAR 之间)jar。这是 WebSphere 等服务器的常见需求。

      这是一个 maven 的示例战争配置,其中特定的 jar 是从 EAR 级别检索的,并专门从 WAR 中排除:

      <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-war-plugin</artifactId>
      <configuration>
          <archive>
          <manifestEntries>
               <Class-Path>lib/wsdl4j-1.6.2.jar lib/mail-1.4.jar</Class-Path>
          </manifestEntries>
          </archive>
          <packagingExcludes>WEB-INF/lib/wsdl4j-1.6.2.jar,WEB-INF/lib/mail-1.4.jar</packagingExcludes>
          <warSourceDirectory>${basedir}/src/main/webapp</warSourceDirectory>
          <warSourceExcludes>WEB-INF/jetty-env.xml</warSourceExcludes>
        </configuration>
       </plugin>
      

      【讨论】:

        【解决方案3】:

        我会说,如果您有一个可以独立运行并且可以独立部署的 Web 应用程序,那么它应该被打包在一个 war 中。但是,如果不是……如果战争只是一个更大的应用程序的一个组件,并且这就是它始终交付/部署的方式,那么只需将 Web 应用程序所需的 Web 资源放入战争中,以及 ear 库中的所有代码 jar。

        【讨论】:

          猜你喜欢
          • 2016-02-06
          • 2011-06-11
          • 2018-02-24
          • 1970-01-01
          • 1970-01-01
          • 2010-11-29
          • 1970-01-01
          • 2011-11-05
          • 2010-12-01
          相关资源
          最近更新 更多