【问题标题】:jgitver plugin, get version in pomjgitver 插件,在 pom 中获取版本
【发布时间】:2017-12-17 10:38:35
【问题描述】:

我正在使用 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 生成的任何时候版本对于module1common-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>

【问题讨论】:

    标签: git maven jgitver


    【解决方案1】:

    抱歉,这个问题我之前没看到过。

    如果你在同一个多模块项目中,那么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 一个正常构建以进行发布/部署。

    希望对您有所帮助。

    --
    Matthieu,jgitver的作者和维护者

    【讨论】:

      【解决方案2】:

      事实证明,自0.2.0-alpha2 发布以来,有一个属性可用于指定计算版本jgitver.calculated_version。然而,自同一个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 中打开,它就可以解决。可能这就是它应该如何工作的方式。

      【讨论】:

        猜你喜欢
        • 2020-07-12
        • 2019-02-10
        • 1970-01-01
        • 2012-04-11
        • 2020-08-28
        • 1970-01-01
        • 2014-01-29
        • 2014-10-22
        • 1970-01-01
        相关资源
        最近更新 更多