项目需求
可以通过配置来动态管理项目的版本号,包括snapshot版本。
问题描述
工程结构:A(父工程)–》B(子工程)–》C(孙工程)–》D重孙工程
B工程的parent指向A,C工程的parent指向B,D工程的parent指向C。
A应该保持相对版本稳定,所有的项目的parent指向A,这个办法看似可以,这个办法不能解决BC之间和CD之间的parent,编译的时候会报错,根本原因是parent中的version不能用表达式,必须是常量值。
解决办法
工程结构不变,在A下添加新工程E,让BCD的parent指向E,这样解决版本号问题。在E中将版本号作为一个属性来管理,A作为构建的入口工程,E用于配置工程的入口,AE版本号可以固定不变,BCD作为业务工程动态调整版本号码。工程A用于聚合,工程E用来继承;将聚合和继承分开管理,带来业务系统版本号的灵活处理。
工程结构:A(父工程)–》B(子工程)–》C(孙工程)–》D重孙工程
为了解决这个问题,我们引入了用于资源共享的父工程E,主要共享版本号和依赖包,所有工程的父工程都依赖这个工程,这样就解决了CD和DE项目依赖的版本问题。
E工程的pom里设置属性my.version,所有子工程BCD引用这个版本号。还有个好处是,使用mvn直接指定版本号,项目版本问题能得到灵活的解决。
mvn clean install -Dmy.version=5.0.0-SNAPSHOT
总结
这样我们就定义了两个工程A和E,A用于构建任务,我们通过聚合实现,E用于管理共享资源,我们通过继承来实现,A和E的版本号正式发版的时候来调整,测试和开发时保持不变,BCD业务工程的版本号,可以灵活设置,包括snapshot版本。这样就可以根据需要动态设置版本号,这种工程搭建方法,尤其适合是1个产品n个项目型的公司使用。
参考链接:
pom文档地址:https://maven.apache.org/pom.html
Maven 完全参考:http://books.sonatype.com/mvnref-book/reference/index.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。