如何发布具有项目间依赖性的Maven多模块项目?
让我们说我们有3层项目。数据库,业务,Web和聚合pom。
Project
|-DB
| |-pom.xml
|-Business
| |-pom.xml
|-pom.xml
所有模块都可以一起发布和分支,因此Aggregator pom配置为为所有子模块分配相同的版本。我们有以下版本:
DB-0.1-SNAPSHOT
Business-0.1-SNAPSHOT which depends on DB-0.1-SNAPSHOT
Web-0.1-SNAPSHOT which depends on Business-0.1-SNAPSHOT
当做release:prepare
时,所有版本都更新为0.1,但是准备失败,因为依赖还没有DB-0.1
。
一种解决方案是为每个模块创建不同的项目,并逐个释放它们,同时使用versions:use-releases
插件将依赖关系更新为0.1
但我不喜欢这个想法,因为它需要大量的配置和脚本。所以,我更喜欢使用聚合并使用单个命令释放所有模块,但问题是,正如我上面所写,当发布插件试图构建Business-0.1
时,存储库中还没有DB-0.1
。
有没有办法管理这些项目间的依赖关系?
谢谢。
UPD:
甚至安装目标失败。
数据库构建 - 确定(任何存储库中都没有快照或发行版本)
业务 - 失败(在存储库中找不到DB-0.1-SNAPSHOT。但它甚至不应该存在!)
我正在使用maven 3.0.2并发布插件2.1
没有找到相关结果
已邀请:
3 个回复
磋判粗惊
这将解决您的问题(可能你可以看看这里作为一个例子)。
炉挤仙挟
磐乓铝举
正如您所看到的,portlet应用程序模块是使用服务作为依赖项构建的,该服务器是一个.jar文件,它将接口与其他内容打包在一起以使服务正常工作。 顺便说一句,我用我的项目使用不同版本的模块做了这个。我发现了一篇有趣的文章谈论这种做法:发布具有独立版本号的多模块项目的模块。你可以阅读摘要来得出关于版本模块是否合适的自己的结论......但是从我的角度来看,在阅读了客户的要求之后,模块的版本化应该是支持的功能似乎是合理的。 Maven没有太痛苦地实施。 在父(服务层)内运行
和
是可行的方法。 Maven按以下顺序进行发布构建和部署:1)父pom 2)服务依赖3)服务portlet。 Maven负责订单,这很好......但服务依赖是基于portlet源代码构建的,目标是在父项目中运行:
...所以依赖性受源代码的影响的portlet应用程序(听起来有点疯狂)。在我的案例中,这是一个棘手的部分。 那么我们如何获得为服务portlet构建和部署的服务依赖项来使用它呢? 好吧,解决方案是在maven-release-plugin中使用一个配置,允许Maven在任何项目中的
阶段运行特定目标。我所做的是在父pom.xml(服务层)的maven-release-plugin声明中添加此配置:
并且Maven能够使用我们的首选版本号部署父级和每个子级模块(您将被要求输入它们)。 总结答案和建议:尝试使用
配置并在父级别运行
和
应根据订单部署父级和模块。 我希望这会在5年之后至少激发出类似情况的人。