我们有一个工作流程要求,这实际上意味着我们需要从git中的当前分支外部定义模块的工件版本.
即如果我们在git的master分支上,我需要<version>master-...</version>
,如果我们在bugfixX分支上,我需要<version>bugfixX-....</version>
为这个pom.xml生成工件.
我之前发现https://github.com/koraktor/mavanagaiata可以提供SHA-1哈希作为属性,从文档中可以看出它也可以提供分支,所以也许它可以在早期运行我们可以设置属性并放入<version>${our.version}</version>
pom的过程.如果这是可能的,我非常希望看到一个有效的pom.xml(并为它奖励500点赏金).
如果没有,我想我们正在进行预处理或"git checkout"使用一些钩子做一些额外的魔法(我还没有尝试过,工作代码也会很棒).
我们有一个顶级pom,可以在构建模块之前运行以生成".."中的属性文件,其中我要求的这个功能需要去.
关于如何解决这个问题的任何建议?
我目前正在使用三个命令的集合来获取当前标记,分支以及最近提交的日期和SHA1.
git describe --always --tag
git log -1 --format="%H%n%aD"
git rev-parse --abbrev-ref HEAD
Run Code Online (Sandbox Code Playgroud)
这将输出如下内容:
1.2.3-5-gdeadbeef
deadbeef3b8d90071c24f51ac8f26ce97a72727b
Wed, 19 May 2010 09:12:34 +0200
master
Run Code Online (Sandbox Code Playgroud)
说实话,我对此完全没问题.但是我正在使用Maven的这些命令以及之前使用过Maven的人,知道外部命令会让POM膨胀多少.我只想减少我的pom.xml,可能会减少执行时间.
我们使用git和maven以及logback.
这意味着日志中的堆栈跟踪显示了包含堆栈跟踪中每一行的jar的实现版本(有关示例,请参阅http://logback.qos.ch/reasonsToSwitch.html#packagingData).
因此,如果我们可以将当前构建的SHA1打包到正在构建的工件的清单中的该字段中,则很容易从git中找到确切的源,该源生成包含源中的单个行的工件.
根据http://maven.apache.org/shared/maven-archiver/examples/manifestEntries.html,这样做的方法是<key>value</key>
在pom的maven-jar-plugin部分中添加一行.这在我的情况下意味着
<Implementation-Version>FooBar</Implementation-Version>
Run Code Online (Sandbox Code Playgroud)
结果
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-jar-plugin:2.3:jar (default-jar) on project axsFTP: Unable to parse configuration of mojo org.apache.maven.plugins:maven-jar-plugin:2.3:ja
r for parameter manifest: Cannot find setter, adder nor field in org.apache.maven.archiver.ManifestConfiguration for 'implementationVersion' -> [Help 1]
Run Code Online (Sandbox Code Playgroud)
鉴于我可以从https://github.com/koraktor/mavanagaiata获取SHA1,如何在MANIFEST.MF文件中正确设置?
是否可以根据当前git分支选择配置文件?
例如,如果您在master分支中,它将选择“生产”配置文件。如果是develop分支,则选择“ development”概要文件。
我找到了提供该属性的mavanagaiata插件,mvngit.branch
但不能在本<profiles>
节中使用。
这样的事情可能吗?还是有更好的方法?我想要一种简单的方法来根据要构建的分支自动选择正确的配置文件。