Maven和RAD产生不同的EAR

时间:2016-06-20 10:28:53

标签: java maven java-ee m2e

我必须从RAD 9.5和maven构建一个项目(Parent和EAR,其中包含jar,ejb和2个war模块)。

当我从maven命令行构建项目时,一切正常。它正在创建在WebSphere 8.5.5上运行的瘦战争存档。

当尝试从RAD更新项目或导出EAR时,我得到的文件不同且不起作用,对于EJB的一个依赖项,使用ClassNotFoundException。

进一步观察,我发现classpath部分中的MANIFEST.MF存在差异。 Maven项目放置了带有lib /前缀和m2e / RAD的实例,如下所示:

Class-Path: lib/log4j-api-2.6.jar lib/log4j-core-2.6.jar lib/junit-4.12.jar lib/hamcrest-core-1.3.

纯maven,并且:

Class-Path: log4j-api-2.6.jar log4j-core-2.6.jar junit-4.12.jar hamcrest-core-1.3.

我尝试更新项目,使用pom中的设置进行播放。这是我最接近工作的应用程序。

我目前的ejb插件配置:

        <plugin>
            <artifactId>maven-ejb-plugin</artifactId>
            <version>2.5</version>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                    </manifest>
                </archive>
                <ejbVersion>3.1</ejbVersion>
            </configuration>
        </plugin>

异常(最低级别):

Caused by: java.lang.ClassNotFoundException: org.apache.logging.log4j.LogManager
at java.net.URLClassLoader.findClass(URLClassLoader.java:600)
at com.ibm.ws.bootstrap.ExtClassLoader.findClass(ExtClassLoader.java:243)
at java.lang.ClassLoader.loadClassHelper(ClassLoader.java:786)
at java.lang.ClassLoader.loadClass(ClassLoader.java:764)
at com.ibm.ws.bootstrap.ExtClassLoader.loadClass(ExtClassLoader.java:134)
at java.lang.ClassLoader.loadClass(ClassLoader.java:741)
at com.ibm.ws.classloader.ProtectionClassLoader.loadClass(ProtectionClassLoader.java:62)
at com.ibm.ws.classloader.ProtectionClassLoader.loadClass(ProtectionClassLoader.java:58)
at com.ibm.ws.classloader.CompoundClassLoader.loadClass(CompoundClassLoader.java:585)
at java.lang.ClassLoader.loadClass(ClassLoader.java:741)
... 75 more

我认为这是问题,但我不知道解决它的问题。

更新: 尝试添加到清单部分:

<classpathPrefix>lib/</classpathPrefix>

同样的结果。

2 个答案:

答案 0 :(得分:0)

这是一个迂回的答案,但您可能会从EE项目开始获得更多成功:WAR,EAR等,然后使用&#34;转换为Maven项目&#34;选项。

您可以找到信息herehere

一旦你知道一个Maven结构将映射回RAD中的EE项目结构,你也可以在另一个方向工作。如果您对现有的项目格式感到满意,不确定有多少工作要离开。

我不确定我是否回答了你的问题,但这个评论太长了,所以这里就是......

答案 1 :(得分:0)

我注意到如果我将maven生成的manifest.mf复制到项目中然后使用RAD构建项目,它会将正确的文件带到最终的EAR。这是一种解决方法。此外,根据this:m2e-wtp只会在不存在的情况下生成清单。