maven父工程版本号统一管理所有子工程

443 阅读1分钟

背景:父工程有多个子工程,想统一用父工程定义的版本统一管理所有子工程

问题点:子工程中的 标签里的 标签不支持定义变量,无法正常编译

解决方法:

在父工程及所有子工程,统一用${revision}代替,并在父工程定义变量值

1.1.6-SNAPSHOT

在父Pom.xml里增加插件

            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>flatten-maven-plugin</artifactId>
                <version>1.2.7</version>
                <configuration>
                    <updatePomFile>true</updatePomFile>
                    <flattenMode>resolveCiFriendliesOnly</flattenMode>
                </configuration>
                <executions>
                    <execution>
                        <id>flatten</id>
                        <phase>process-resources</phase>
                        <goals>
                            <goal>flatten</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>flatten.clean</id>
                        <phase>clean</phase>
                        <goals>
                            <goal>clean</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

子工程使用父工程定义的变量${revision}

这样便能正常打包

正确打包后,会生成.flattened-pom.xml,打开后会发现变量已被替换

部署后,私仓里可以查看到jar包

容易错的点:

变量名网络上不少使用${version} ,虽然用idea自带的生命周期instatll不报错,但其实没用到flatten-maven-plugin插件打包,由于关键字冲突,导致deploy无法正常部署到私仓。

检查方法:

1、idea执行生命周期instatll看有没生成.flattened-pom.xml,有没替换掉变量

2、idea执行生命周期deploy 有没报错,私仓有没部署成功

原理剖析:

1、插件替换变量生成 .flattened-pom.xml 代替原Maven的pom.xml

详细原理参考以下文章:

参考文章:zhuanlan.zhihu.com/p/270574226