【问题标题】:Library dependencies outside WAR fileWAR 文件外的库依赖项
【发布时间】:2014-06-17 06:11:10
【问题描述】:

我有一个要求,我需要打包各种 Web 服务的所有公共类并将它们作为依赖项(以避免多个服务的重复)。我的EAR文件结构如下:

    META-INF/MANIFEST.MF
    META-INF/application.xml
    commons-codec-1.2.jar
    MyWebService1.war
    MyWebService2.war
    MyWebService1.jar
    MyWebService2.jar
    EJB_Bean.jar

现在我在 WAR 文件的 Manifest 下包含了依赖项 jar,如下所示(不确定是否合适), `

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.9.4
Created-By: 1.7.0_51-b13 (Oracle Corporation)
Class-Path: MyWebService1.jar

在所述结构中,当我尝试将 EAR 文件部署到 Web 逻辑服务器时,我得到 java.lang.NoClassDefFoundError,但是如果我将依赖 jar 移动到 WEB-INF/lib 下我的 WAR 文件夹并重新打包我的 EAR 文件,部署按预期进行。

有什么方法可以将我的 WAR 文件依赖库包含在 WAR 文件之外,甚至包含在我的 EAR 文件之外,这是我的问题。任何帮助或建议将不胜感激。

【问题讨论】:

    标签: java web-services jakarta-ee war


    【解决方案1】:

    设置 EAR 包的库的一种简单方法是在 EAR 根目录下创建一个 lib 文件夹并将您的库放入其中。

    在这种情况下,您的 EAR 中将有类似的内容:

    META-INF/MANIFEST.MF
    META-INF/application.xml
    MyWebService1.war
    MyWebService2.war
    lib/commons-codec-1.2.jar
    lib/MyWebService1.jar
    lib/MyWebService2.jar
    EJB_Bean.jar
    

    【讨论】:

    • 必须在我的 EAR 文件中创建 APP-INF/lib 文件夹并将我的库放在那里。战争可以很容易地访问它。谢谢你的提示。
    【解决方案2】:

    在 tomcat 中,jar 文件可以放在 lib 目录中,这些 jar 文件可供部署在该服务器上的所有应用程序使用。在网络逻辑中,必须有类似的方法来做到这一点。一个 lib 文件夹,Web 逻辑服务器从中加载所有 jar 文件。

    【讨论】:

      【解决方案3】:

      我的第一个建议是使用某种依赖管理,例如 MavenGradleIvy - 自己这样做非常困难且容易出错。

      在您的情况下,一个更简单的解决方案是使用您的“公共 jar”(特别是如果它们在多个应用程序之间共享),并将它们添加到您的网络服务器的共享库中。例如,Tomcat 会加载所有放在 tomcat-dir/common/lib 目录下的库。

      【讨论】:

        猜你喜欢
        • 2014-06-06
        • 1970-01-01
        • 1970-01-01
        • 2012-11-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多