发布托管在单个Git存储库中的多模块Maven项目
我试图发布多模块项目的各个模块,这些模块包含在一个git存储库中 文件夹结构如下所示:发布托管在单个Git存储库中的多模块Maven项目,git,maven,maven-release-plugin,multi-module,Git,Maven,Maven Release Plugin,Multi Module,我试图发布多模块项目的各个模块,这些模块包含在一个git存储库中 文件夹结构如下所示: |- api/pom.xml |- database/pom.xml |- core/pom.xml pom.xml 父pom只是作为一种构建所有子组件的方式,通过使用标记,这种方式是有意义的。本质上,构建api,然后是数据库,然后是核心 该项目一开始托管在SVN中,只需在mavenscm标记中指向存储库中的不同路径,就很容易让maven release命令发挥作用。Git的情况似乎并非如此
|- api/pom.xml
|- database/pom.xml
|- core/pom.xml
pom.xml
父pom只是作为一种构建所有子组件的方式,通过使用
标记,这种方式是有意义的。本质上,构建api,然后是数据库,然后是核心
该项目一开始托管在SVN中,只需在mavenscm
标记中指向存储库中的不同路径,就很容易让maven release
命令发挥作用。Git的情况似乎并非如此
当运行mvn release:prepare
时,它会根据需要对api pom执行更改,但当执行mvn release:perform
时,它会尝试构建父pom,并且由于无法解析database/pom.xml中列出的api快照依赖关系而无法构建数据库包
我应该如何配置我的scm标记,以便能够在Git存储库中发布特定模块?这可能吗
编辑:添加pom示例
以下是pom文件外观的示例设置:
父pom.xml
4.0.0
com.findwise.hydra
水螅亲本
0.2.0
聚甲醛
应用程序编程接口
数据库
核心
api/pom.xml
4.0.0
com.findwise.hydra
海德拉api
罐子
0.2.0
${project.artifactId}
海德拉API
...
...
UTF-8
...
${project.name}
...
数据库
pom看起来非常像api
,但它依赖于api
。这同样适用于核心
,它依赖于数据库
(并通过它,依赖于api
)
尽管
api
和database
工件本身很重要,因为api
定义了客户端api和database
后端api,两者都用于与应用程序集成。由此产生了单独发布它们的最初想法——父pom只是一种事后思考,以允许更简单地构建整个堆栈 发布多模块构建的常用方法是从根位置执行,这意味着也可以使用它发布所有子模块。不单独释放单个模块。如果您尝试这样做,您将失去版本之间的关系
如果您真的想单独发布模块,只需从中创建单独的maven项目,并为每个项目提供一个git存储库
您提到的树看起来非常像一个多模块构建,它应该在根目录的一个步骤中发布
根据您所更新的内容,我建议您使用以下结构的真正多模块构建:
root
+-- pom.xml (1.0-SNAPSHOT)
!
+-- api
! +-- pom.xml (1.0-SNAPSHOT)
+-- database
! +-- pom.xml (1.0-SNAPSHOT)
+-- core
+-- pom.xml (1.0-SNAPSHOT)
最好是在Maven中使用继承,这意味着在每个模块api、核心、数据库中都使用这样的父级:
|- api/pom.xml
|- database/pom.xml
|- core/pom.xml
pom.xml
4.0.0
com.findwise.hydra
您正在使用到父级中,如:
org.apache.maven.plugins
进入父级,这使您有机会仅在一个点上使用相应的版本定义依赖项,而无需在模块中定义版本
这将大大减少模块中pom的大小
结果将是通过单个mvn发行版:prepare
等从父级发布,但将产生不同的工件,如hydra api
,hydra core
和hydra数据库
,具有相同的版本号,确保有api,核心等。是否在api、数据库或核心模块中使用父标记引用父pom中的内容?我没有在模块pom.xml中使用父标记。根目录中的“父”pom或多或少只允许以正确的顺序构建核心和所有其他组件。我是否需要在“子模块”POM中使用父标记?父级的一步发布会释放所有模块工件,还是仅仅是某种超级工件?如果您使用它以正确的顺序构建,您会有从核心到api等的依赖关系。在这种情况下,我建议从我描述的单个点进行真正的多模块构建和发布。你能发布你的父母pom,也许还有一个模块吗?使讨论更简单。添加了有关POM的更多信息。感谢您提供的任何建议!:)非常好的建议。非常感谢。这一次我最终手动发布了pom,但将按照您的建议重新排列pom,看起来这是正确且最好的方法。