WAR文件外的库依赖项

时间:2014-06-17 06:11:11

标签: java web-services java-ee war

我有一个要求,我需要打包各种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 ,但是如果我在WEB-INF / lib下移动依赖项jar我的WAR的文件夹并重新打包我的EAR文件,部署按预期正常。

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

3 个答案:

答案 0 :(得分:2)

设置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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

在您的情况下,一个更简单的解决方案是采取您的常见罐子#34; (特别是如果它们在多个应用程序之间共享),并将它们添加到Web服务器的共享库中。例如,Tomcat将加载位于tomcat-dir / common / lib目录下的所有库。