最近在做项目中,用Maven管理项目间的依赖关系,遇到一个问题,快折腾死了,不过初步试出来一种解决方案。在此把问题及解决方案描述一下,以资共享。
问题描述:有两个项目A和B,Dynamic Web Project。依赖关系是,B-->A,一种方式是利用maven-war-plugin的Overlay机制(例子可参见官网),但这种解决方案默认是将两个Web应用的资源进行合并,相关的class都会被复制到WEB-INF/classes下面,相关的JSP等资源也合并到一起。我的要求是A的class被独立打包成一个jar,在发布到应用服务器后存在于B应用的WEB-INF/lib下面,A应用的其他资源都不要。 处理思路: 一、A应用的POM处理 <?xml version="1.0" encoding="UTF-8"?><project ......"><modelVersion>4.0.0</modelVersion><groupId>com.xxx</groupId><version>0.0.1-SNAPSHOT</version><name>A-web</name><artifactId>A-web</artifactId><packaging>war</packaging><build><plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <configuration> <!--注意增加这两行,在打包时相关的类会被独立打成jar--> <attachClasses>true</attachClasses> <classesClassifier>api</classesClassifier> </configuration> <version>2.3</version> <executions> </executions> </plugin></plugins></build></project> 打包完成后,包含A-web.war和a-web-api.jar及其他文件。二、B应用的POM处理<?xml version="1.0" encoding="UTF-8"?><project ...........><modelVersion>4.0.0</modelVersion><groupId>com.xxx</groupId><version>0.0.1-SNAPSHOT</version><name>B</name><artifactId>B</artifactId><packaging>war</packaging><dependencies><dependency><groupId>com.xxx</groupId><artifactId>A-web</artifactId><version>0.0.1-SNAPSHOT</version><type>jar</type><scope>compile</scope><classifier>api</classifier></dependency></dependencies></project> 注意以上的依赖中的type属性为jar,而不是默认的war。classifier的值api与A中的classesClassifier的值api要一致。