Apache Maven:如何打包不同classifier构件并对应依赖指定classifier
实现方案
核心思路
通过Maven的Profile机制区分两种构建场景,每个Profile单独配置对应A的依赖classifier、以及B自身打包的classifier,实现两套构件的独立构建。
步骤1:配置项目B的pom.xml
在B的pom.xml中添加两个自定义Profile,示例配置如下:
<project> <!-- 项目基础groupId、artifactId、version等配置省略 --> <dependencies> <!-- 不需要区分classifier的公共依赖统一写在此处 --> </dependencies> <profiles> <!-- Profile1:构建classifier为com的B构件 --> <profile> <id>com</id> <activation> <activeByDefault>false</activeByDefault> </activation> <dependencies> <!-- 引入A的com classifier依赖 --> <dependency> <groupId>替换为A项目的groupId</groupId> <artifactId>替换为A项目的artifactId</artifactId> <version>替换为A项目的版本号</version> <classifier>com</classifier> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.3.0</version> <configuration> <!-- 指定当前B构件的classifier为com --> <classifier>com</classifier> </configuration> </plugin> </plugins> </build> </profile> <!-- Profile2:构建classifier为exec的B构件 --> <profile> <id>exec</id> <activation> <activeByDefault>false</activeByDefault> </activation> <dependencies> <!-- 引入A的exec classifier依赖 --> <dependency> <groupId>替换为A项目的groupId</groupId> <artifactId>替换为A项目的artifactId</artifactId> <version>替换为A项目的版本号</version> <classifier>exec</classifier> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.3.0</version> <configuration> <!-- 指定当前B构件的classifier为exec --> <classifier>exec</classifier> </configuration> </plugin> </plugins> </build> </profile> </profiles> </project>
步骤2:执行构建
- 构建classifier为
com的B包:执行命令mvn clean package -Pcom - 构建classifier为
exec的B包:执行命令mvn clean package -Pexec - 需同时生成两个包直接执行合并命令即可:
mvn clean package -Pcom,exec
补充说明
- 如果需要将B构件安装到本地仓库或部署到私服,将上述命令中的
package替换为install或deploy即可,对应classifier会自动保留。 - 如果A、B在同一工程下,构建B之前需先执行A的
install命令,确保本地仓库存在对应classifier的A构件。
内容的提问来源于stack exchange,提问作者Tarun Thapa
相关产品推荐
相关产品推荐

