如何在使用maven构建的包含EJB jar的EAR中引用共享库作为单独的工件

时间:2012-06-21 11:20:04

标签: maven deployment weblogic shared-libraries ear

我正在使用maven来构建应用程序。

我在应用服务器中部署了一个包含许多常见jar的WAR文件作为共享库。

我有一个包装类型EJB的工件(比如说A-EJB)。我已经构建了ejb jar文件。

我有另一个包装类型为EAR的工件(比如A-EAR)。

我在A-EAR的pom文件中添加了A-EJB依赖项。我可以构建EAR文件并添加共享库引用,我在EAR的weblogic-application.xml中添加了库引用。

在我的最终EAR文件中,我可以看到A-EJB.jar文件,A-EAR工件的其他依赖jar文件。

EAR结构:

-------------- APP-INF \ lib \ some jars
-------------- META-INF \ application.xml,MANIFEST.MF,weblogic-application.xml
-------------- A-ejb.jar

A-EJB.jar的类文件需要引用共享库中的公共jar。

理想情况下,我希望部署应该成功发生但不会发生这种情况。尽管我在EAR文件中有共享库引用,但在部署期间准备EJB模块时,部署由于classNotFoundException而失败。

A-EJB.jar的类文件搜索所需的jar文件以供参考,但它们在共享库中可用,并且即使EAR文件具有对它的引用,也不使用共享库。

例外:

weblogic.application.ModuleException:异常准备模块:EJBModule [EJB:011023]读取部署描述符时发生错误。错误是:  .................................................. .........

引起者:java.lang.ClassNotFoundException: .................................................. ..........

因此,这意味着即使EAR具有共享库引用,EAR中存在的ejb.jar也没有引用共享库。这是真的吗?

是否有人遇到此异常和情况。请帮我解决这个问题。

1 个答案:

答案 0 :(得分:0)

我建议你使用这个设置的耳塞..可能有帮助..

<plugin>
    <artifactId>maven-ear-plugin</artifactId>
    <configuration>
        <modules>
            <ejbModule>
                <groupId>ur ejb</groupId>
                <artifactId>ur ejb Id</artifactId>
            </ejbModule>
            <jarModule>
                <groupId>......</groupId>
                <artifactId>......</artifactId>
            </jarModule>
            ....
            ....
    Other jar modules to be included other than the one included in dependency tag
            ....
            ....
        </modules>
        <archive>
            <manifest>
                <addClasspath>false</addClasspath>
            </manifest>
        </archive>
        <displayName>...name...</displayName>
        <description>........desc.......</description>
    </configuration>
</plugin>