我使用jgitver library使用Git存储库的状态自动生成semver。
我有一个多模块项目,其中模块是相互依赖的,这意味着如果我对一个模块进行更改,那么其他模块应该开始引用已更改模块的新版本。
所有模块都在同一个Git存储库中,因此Git中的任何更改都会更改所有模块的版本。以下是我的项目结构的一个例子
.git (Common repository)
module1
common-module
pom.xml (Parent POM)
以下是我如何包含依赖模块的示例
<-- POM of module1, includes common-module-->
<dependency>
<groupId> com.test</groupId>
<artifactId>common-module</artifactId>
<version>1.0.0</version> <!-- version generated by jgitver -->
</dependency>
由于jgitver
生成的版本在module1
和common-module
生成的任何时候都是相同的,因为它们位于同一个Git存储库中,我不想要在所有模块中硬编码版本。好像版本发生了变化,然后我必须手动更改common-module
依赖项的所有模块中的版本。
是否有像${project.version}
这样的变量可用于引用jgitver
生成的当前版本?
我希望将module1
配置如下
<dependency>
<groupId> com.test</groupId>
<artifactId>common-module</artifactId>
<version>${JGITVER_GENERATED_VERSION_VARIABLE}</version> <!-- version generated by jgitver -->
</dependency>
答案 0 :(得分:0)
事实证明,自jgitver.calculated_version
发布以来,有一个属性可用于指定计算版本0.2.0-alpha2
。但是,自从0.2.0-alpha2
版本发布以来,它根本不需要。
想要将计算版本指定为依赖项版本的子模块应该使用project.version
。静态值保持为0,当使用maven构建项目时,project.version
将被解析为正确的值。
我在面对以下问题Multi module project: Building only a sub module does not resolve versions for deps
后遇到了这个问题 只要项目是从父项构建的, project.version
就可以工作,如果项目是从子模块目录本身构建的,它就不起作用。 project.version
解析为0
,因此导致错误common-module-0.jar
丢失。问题已经关闭,jgitver
也应该从子模块开始工作0.2.0-alpha2
。但是它不适用于某些版本的maven。
在项目的github页面上,提到maven的最小版本应为3.3.2
Ref:jgitver-maven-plugin requires at least maven-3.3.2 to work correctly.。但是对我来说,jgitver 1.1.4
无法与maven 3.3.5
一起使用,并且只有在构建子模块时才会继续构建,从而导致错误common-module-0
丢失。我可以确认它适用于maven 3.3.9
。我开始知道,因为我在两台不同版本的maven上工作。我已将maven更新为当前版本3.5.2
,并且它可以从子模块中正常工作。
注意:我的IDE STS 3.8.4/Eclipse Mars.2 (4.5.2)
似乎无法从project.version
解析计算的项目版本,并尝试解析common-module-0
。只有在Eclipse中打开此项目时,它才会得到解决。也许这就是它应该如何运作。
答案 1 :(得分:0)
抱歉,这个问题有点迟了,我以前没看过。
如果您在同一个多模块项目中,则jgitver的使用不应更改声明子模块之间依赖性的方式。即使参加聚会的jgitver,您仍应使用project.version
<dependency>
<groupId> com.test</groupId>
<artifactId>common-module</artifactId>
<version>${project.version}</version> <!-- use a reference to the POM model -->
</dependency>
对于IDE,问题有所不同,因为它们不太喜欢jgitver的动态行为(至少与Eclipse&Intellij IDEA相同)。 您可以使用配置文件和/或停用来查看有关jgitver IDE usage的Wiki页面;您可以正常使用IDE,但必须委派Maven或gradle正常版本进行发布/部署。
希望有帮助。
-
jgitver