【问题标题】:Maven and RAD produce different EARsMaven 和 RAD 产生不同的 EAR
【发布时间】:2016-10-21 13:43:12
【问题描述】:

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

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

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

进一步看,我发现类路径部分的 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.xml 中的设置进行设置。这是我最接近工作应用程序的地方。

我当前的 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>

同样的结果。

【问题讨论】:

  • 如果你创建一个支持瘦战争的 EAR 文件,那些被提取的文件必须位于某个地方,这意味着如果 EAR 进入 EAR 级别的 lib 文件夹。我不知道 RAD 在这里做什么......
  • 是的,他们在那里。只是没有从任何地方引用。另外,请参阅更新问题。
  • 如果您已部署 EAR 文件,Websphere 应用程序服务器会发出异常?
  • 是的。我可能会发布整个异常,但我很确定核心异常就是我提出的问题。
  • 你部署的EAR文件是用Maven还是RAD构建的?

标签: java maven jakarta-ee m2e


【解决方案1】:

这是一个迂回的答案,但您可能会发现从 EE 项目开始会更成功:WAR、EAR 等,然后使用“转换为 Maven 项目”选项。

您可以找到信息herehere

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

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

【讨论】:

  • 这已经完成了,该项目以 RAD 项目开始(将 ant 隐藏在其皮肤下)并且必须转换为 maven,因为 CI 和 ant 效果不佳。转换后,我发现 RAD 的行为与原生 maven 不同。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-08
    • 2019-01-05
    • 2011-09-29
    • 2014-11-21
    • 1970-01-01
    • 1970-01-01
    • 2016-07-04
    • 2019-07-28
    相关资源
    最近更新 更多