Ambari子模块继承两套版本号
Ambari有很多个模块,最顶层的是Ambari Main(Ambari主模块)。大部分模块的版本号继承自Ambari Main,而Ambari Metrics及其下面的模块则未继承自Ambari Main,下面姑且分别称之为Ambari Main系和Ambari Metrics系。
Ambari Main系
Ambari > Ambari Project > Ambari Web/Server/Agent ……
Ambari Web/Server/Agent等模块都继承了Ambari Project模块的版本号,参见Ambari Server的pom.xml:
/ambari-branch-2.2.1/ambari-server/pom.xml
<parent>
<groupId>org.apache.ambari</groupId>
<artifactId>ambari-project</artifactId>
<version>2.2.1.0.0</version>
<relativePath>../ambari-project</relativePath>
</parent>
Ambari Project模块则又继承了Ambari Main的版本号,参见Ambari Project的pom.xml:
/ambari-branch-2.2.1/ambari-project/pom.xml
<parent>
<groupId>org.apache.ambari</groupId>
<artifactId>ambari</artifactId>
<version>2.2.1.0.0</version>
</parent>
Ambari Metrics系
Ambari Metrics > Ambari Metrics Common/Collector/Monitor……
Ambari Metrics模块并未继承Ambari Main的版本号,Ambari Metrics的pom.xml中未配置<parent>
标签:
/ambari-branch-2.2.1/ambari-metrics//pom.xml
Ambari Metrics Common/Collector/Monitor等模块则继承了Ambari Metrics模块的版本号,参见Ambari Metrics Common的pom.xml:
/ambari-branch-2.2.1/ambari-metrics/ambari-metrics-common/pom.xm
<parent>
<artifactId>ambari-metrics</artifactId>
<groupId>org.apache.ambari</groupId>
<version>2.2.1.0.0</version>
</parent>
以我们下载的Ambari 2.2.1版本的源码为例,Ambari Main的原始版本号为2.2.1.0.0,Ambari Project/Web/Server/Agent/Metrics等模块的原始版本号也是2.2.1.0.0。
执行以下命令修改Ambari Main的版本号至2.2.1.1:
# cd /ambari/ambari-branch-2.2.1
# mvn versions:set -DnewVersion=2.2.1.1
然后查看各个模块的pom.xml发现,Ambari Project/Server/Agent等模块pom文件中版本号都已经更新为2.2.1.1,而Ambari Metrics模块的pom文件中版本号依然为2.2.1.0.0。
执行以下命令对Ambari Main进行编译:
# mvn -B install package rpm:rpm -DnewVersion=2.2.1.1
-DskipTests -Dpython.ver="python >= 2.6" -Preplaceurl
编译结束后,可以发现
Ambari Web/Views等模块已经生成了版本号为2.2.1.1的rpm包:
/ambari-branch-2.2.1/ambari-web/target/rpm/ambari-web/RPMS/noarch/ambari-web-2.2.1.1-1.noarch.rpm
而Ambari Metrics模块生成的依然是版本号为2.2.1.0的rpm包:
/ambari-branch-2.2.1/ambari-metrics/target/rpm/ambari-metrics/RPMS/noarch/ambari-metrics-2.2.1.0-0.noarch.rpm
版本号格式规范
pom.xml文件中以正则表达式限定各模块的各种版本号格式。
parse-version
<execution>
<id>regex-property</id>
<goals>
<goal>regex-property</goal>
</goals>
<configuration>
<name>ambariVersion</name>
<value>${project.version}</value>
<regex>^([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)(\.|-).*</regex>
<replacement>$1.$2.$3.$4</replacement>
<failIfNoMatch>false</failIfNoMatch>
</configuration>
</execution>
parse-package-version
Ambari Main系
参见Ambari的pom.xml:
/ambari-branch-2.2.1/pom.xml
<execution>
<id>parse-package-version</id>
<goals>
<goal>regex-property</goal>
</goals>
<configuration>
<name>package-version</name>
<value>${project.version}</value&