You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多模块Maven应用在OpenLiberty开发模式下依赖路径错误求助

你的思路是对的——OpenLiberty应该以EAR作为核心部署单元来加载依赖,而非单独的EJB模块。下面是具体的解决步骤:

一、修正Liberty开发模式的部署目标

Liberty开发模式(mvn liberty:dev)默认会基于当前执行命令的模块加载资源,你需要确保它指向EAR模块而非EJB模块:

  1. 切换到EAR模块目录下执行开发模式命令:
cd ear
mvn liberty:dev
  1. 或者在EAR模块的pom.xml中明确配置liberty-maven-plugin,指定加载当前EAR模块:
<plugin>
    <groupId>io.openliberty.tools</groupId>
    <artifactId>liberty-maven-plugin</artifactId>
    <version>3.10.0</version>
    <configuration>
        <serverName>myServer</serverName>
        <!-- 指定要部署的EAR构件 -->
        <appArtifact>
            <groupId>${project.groupId}</groupId>
            <artifactId>${project.artifactId}</artifactId>
            <version>${project.version}</version>
            <type>ear</type>
        </appArtifact>
        <!-- 可选:指定server.xml的位置 -->
        <serverXml>${project.basedir}/src/main/liberty/config/server.xml</serverXml>
    </configuration>
</plugin>
二、解决CWWKM2179W警告

这个警告是因为你手动在server.xml配置了绝对路径的EAR,但Liberty Maven插件的部署逻辑与手动配置冲突。解决方法:

  1. 推荐方案:移除server.xml中的手动配置
    删除server.xml里的<enterpriseApplication>节点,让Liberty插件自动处理EAR的部署——插件会自动将构建好的EAR部署到服务器的dropins或apps目录,同时自动生成对应的配置,避免路径冲突。

  2. 如果必须保留手动配置
    改用相对于Liberty服务器的路径或Maven变量,避免绝对路径:

<enterpriseApplication id="my-app" name="my-app" contextRoot="/" 
    location="${server.config.dir}/apps/${project.artifactId}-${project.version}.ear"/>
三、解决SRVE9967W依赖查找警告

这个警告是EJB模块的MANIFEST.MF中指定的依赖路径指向了EJB自身的目录,而非EAR的依赖目录。需要调整EJB模块的MANIFEST配置:

在EJB模块的pom.xml中配置maven-ejb-plugin,生成正确的Class-Path路径(指向EAR的lib目录):

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-ejb-plugin</artifactId>
    <version>3.2.0</version>
    <configuration>
        <archive>
            <manifest>
                <addClasspath>true</addClasspath>
                <!-- EJB模块打包在EAR的子目录中,依赖在EAR的lib目录,所以用相对路径../lib/ -->
                <classpathPrefix>../lib/</classpathPrefix>
            </manifest>
        </archive>
    </configuration>
</plugin>

同时确保EAR模块的pom.xml正确配置maven-ear-plugin,将EJB模块和依赖打包到正确位置:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-ear-plugin</artifactId>
    <version>3.3.0</version>
    <configuration>
        <modules>
            <ejbModule>
                <groupId>${project.groupId}</groupId>
                <artifactId>ejb</artifactId>
            </ejbModule>
        </modules>
        <!-- 将第三方依赖打包到EAR的lib目录 -->
        <defaultLibBundleDir>lib</defaultLibBundleDir>
    </configuration>
</plugin>

完成以上配置后,Liberty会以EAR为单元加载应用,所有依赖会从EAR的lib目录或EJB模块中正确读取,不再出现路径错误的警告。

内容的提问来源于stack exchange,提问作者John Deverall

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 13:40:47