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

在Eclipse中用Maven构建Skinny War及依赖共享配置求助

没问题,我帮你梳理清楚怎么实现这个需求——把Project A的依赖抽离到Shared Lib生成Skinny War,同时让Weblogic正确识别共享库的依赖。下面是一步步的实操指引:

第一步:配置Shared Lib项目(共享依赖库)

首先要把Shared Lib做成Weblogic能识别的共享库,核心是在Maven配置里添加共享库标识:

  1. 调整Shared Lib的pom.xml配置
    • 设置打包类型:如果是包含依赖的库,用war或jar都可以,这里以war为例:
      <packaging>war</packaging>
      
    • 添加Maven插件配置,在MANIFEST文件中定义共享库的关键标识(Weblogic靠这个识别共享库):
      <build>
          <plugins>
              <plugin>
                  <groupId>org.apache.maven.plugins</groupId>
                  <artifactId>maven-war-plugin</artifactId>
                  <version>3.3.2</version>
                  <configuration>
                      <archive>
                          <manifestEntries>
                              <!-- 共享库唯一名称,后续Project A要引用这个值 -->
                              <Extension-Name>shared-lib-core</Extension-Name>
                              <!-- 版本信息,确保和Project A声明的一致 -->
                              <Specification-Version>1.0</Specification-Version>
                              <Implementation-Version>1.0.0</Implementation-Version>
                          </manifestEntries>
                      </archive>
                  </configuration>
              </plugin>
          </plugins>
      </build>
      
    • 将原来Project A中的所有依赖,全部添加到Shared Lib的dependencies节点下,scope保持compile。
第二步:改造Project A生成Skinny War

让Project A不再打包依赖,而是声明依赖Shared Lib:

  1. 修改依赖scope
    把Project A中所有需要从Shared Lib获取的依赖,scope改为provided,这样Maven打包时会自动排除这些依赖:

    <dependencies>
        <!-- 示例:原来的业务依赖改为provided -->
        <dependency>
            <groupId>com.example</groupId>
            <artifactId>common-service</artifactId>
            <version>1.0.0</version>
            <scope>provided</scope>
        </dependency>
        <!-- 其他抽离的依赖同理修改 -->
    </dependencies>
    
  2. 配置Maven打包插件,声明对Shared Lib的依赖
    在Project A的pom.xml中添加war插件配置,在MANIFEST里关联Shared Lib:

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.3.2</version>
                <configuration>
                    <archive>
                        <manifestEntries>
                            <!-- 声明依赖的共享库列表 -->
                            <Extension-List>shared-lib</Extension-List>
                            <!-- 对应Shared Lib的Extension-Name -->
                            <shared-lib-Extension-Name>shared-lib-core</shared-lib-Extension-Name>
                            <!-- 对应Shared Lib的版本 -->
                            <shared-lib-Specification-Version>1.0</shared-lib-Specification-Version>
                        </manifestEntries>
                    </archive>
                    <!-- 可选:显式排除WEB-INF/lib下的所有jar,确保是纯Skinny War -->
                    <packagingExcludes>WEB-INF/lib/*.jar</packagingExcludes>
                </configuration>
            </plugin>
        </plugins>
    </build>
    
第三步:Weblogic服务器部署与配置

Weblogic需要先识别共享库,才能让Project A调用到依赖:

  • 先部署Shared Lib:

    1. 把Shared Lib打包生成的war/jar上传到Weblogic控制台
    2. 部署时勾选Deploy as a library选项(Weblogic控制台部署页面的关键选项),或者用WLST脚本部署时指定libraryModule='true'
    3. 部署完成后,在Weblogic的「Deployments」列表里能看到Shared Lib的类型是「Library」
  • 再部署Project A的Skinny War:
    直接上传Project A的war包正常部署即可,Weblogic会根据MANIFEST里的声明自动关联到已部署的Shared Lib。

常见问题排查

如果还是无法识别依赖,检查以下几点:

  • 核对Shared Lib的Extension-Name和Project A中shared-lib-Extension-Name的拼写(大小写敏感)
  • 确认Shared Lib确实包含了所有需要的依赖:解压Shared Lib包,查看WEB-INF/lib(war类型)或jar内部是否有对应类文件
  • 检查Project A的依赖scope是否全部改为provided,避免Maven把依赖打包进war导致冲突
  • 确保部署顺序正确:必须先部署Shared Lib,再部署Project A
  • 查看Weblogic服务器日志(domain_home/servers/{server_name}/logs/{server_name}.log),日志会明确提示找不到共享库、版本不匹配等具体错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:02:17