在Eclipse中用Maven构建Skinny War及依赖共享配置求助
没问题,我帮你梳理清楚怎么实现这个需求——把Project A的依赖抽离到Shared Lib生成Skinny War,同时让Weblogic正确识别共享库的依赖。下面是一步步的实操指引:
首先要把Shared Lib做成Weblogic能识别的共享库,核心是在Maven配置里添加共享库标识:
- 调整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:
修改依赖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>配置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:
- 把Shared Lib打包生成的war/jar上传到Weblogic控制台
- 部署时勾选Deploy as a library选项(Weblogic控制台部署页面的关键选项),或者用WLST脚本部署时指定
libraryModule='true' - 部署完成后,在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
相关产品推荐
相关产品推荐

