【问题标题】:makefile variable from Maven version来自 Maven 版本的 makefile 变量
【发布时间】:2018-03-09 19:19:28
【问题描述】:

我正在尝试编写make 配方以将 jar 名称从包版本更改为 git 提交。

COMMIT := $(shell git log -1 --format=%h)
MVN_VERSION := $(shell mvn -q -Dexec.executable="echo" -Dexec.args='${project.version}' --non-recursive exec:exec)

jar:
    mvn package assembly:single

rename:
    @echo $(MVN_VERSION)
    @echo $(COMMIT)
    mv target/myjar-$(MVN_VERSION).jar target/myjar-$(COMMIT).jar

我知道相应的 shell 命令(来自this answer 的 Maven)在 bash 中独立工作,但是当我运行时,变量中没有存储任何内容。

> make rename

4cbee79
mv target/myjar-.jar target/myjar-4cbee79.jar
mv: rename target/myjar-.jar to target/myjar-4cbee79.jar: No such file or directory

【问题讨论】:

  • 我会将项目的版本更改为 git sha,这可以通过使用 maven.apache.org/maven-ci-friendly.html 或多或少轻松实现(至少需要 Maven 3.5.X),此外,你为什么打电话给 assembly:single而不是以您可以简单地调用 mvn package 的方式配置程序集插件?
  • 简短的回答是我是 Maven 新手。感谢您的提示,它们帮助很大。
  • 在 Maven 项目中,makefile 很少是正确的解决方案。如果可能的话,您弄清楚如何更改适当插件的配置,以便您可以留在 Maven 生命周期中。

标签: maven makefile


【解决方案1】:

你必须通过加倍来逃避所有你想要传递到 shell 的美元符号。否则 make 将它们扩展为 make 变量:

MVN_VERSION := $(shell mvn -q -Dexec.executable="echo" -Dexec.args='$${project.version}' --non-recursive exec:exec)

如果不传递选项 -Dexec.args=''(空字符串),因为 make 扩展了从未设置的 make 变量 project.version

【讨论】:

    猜你喜欢
    • 2016-01-02
    • 2020-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多