• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

alx3apps/jgit-buildnumber: Git buildnumber for Maven and Ant without Git CLI

原作者: [db:作者] 来自: 网络 收藏 邀请

开源软件名称(OpenSource Name):

alx3apps/jgit-buildnumber

开源软件地址(OpenSource Url):

https://github.com/alx3apps/jgit-buildnumber

开源编程语言(OpenSource Language):

Java 100.0%

开源软件介绍(OpenSource Introduction):

Git buildnumber plugin for Maven and Ant based on JGit

Allows to get git buildnumbers, while building java projects, in pure Java without Git command-line tool.

Note: Maven already has ubiquitous buildnumber-maven-plugin , this project is NIH substitution for it with Git support only.

Plugin was added to Maven central. Maven-generated site is available here.

Build number

Build number is project-build's id, it is generated during build process, stored in MANIFEST.MF file. On application startup it is retrived from MANIFEST.MF to be showed in -v ouput or in webpage footer.

In our case buildnumber consists of:

Human readable id: tag name or branch name

git describe --exact-match --tags HEAD # tag name
git symbolic-ref -q HEAD # branch name

Globally unique id: commit sha1

git rev-parse HEAD # revision
git rev-parse --short HEAD # short revision

Build incremental id: commits count in this branch

git rev-list HEAD | wc -l

This plugin will extract parameters above and expose them as Maven or Ant properties. It does NOT use Git CLI commands above, it uses pure java JGit API instead.

Note: result properties won't coincide exactly with output of git CLI commands above, there are differences that are not taken into consideration - checkouted tag or not, all tags returned instead of latest, commits are counted form HEAD to root without branches

Usage in Maven 3

Note: this plugin accesses Git repo only once during multi-module build.

###Store raw buildnumber parts in MANIFEST.MF file

In this case extracted buildnumber parts are stored in manifest as is, and may be read from there on startup and composed into buildnumber.

Plugin config:

<!-- enable JGit plugin -->
<plugin>
    <groupId>ru.concerteza.buildnumber</groupId>
    <artifactId>maven-jgit-buildnumber-plugin</artifactId>
    <version>1.2.9</version>
    <executions>
        <execution>
            <id>git-buildnumber</id>
            <goals>
                <goal>extract-buildnumber</goal>
            </goals>
            <phase>prepare-package</phase>
        </execution>
    </executions>
</plugin> 
<!-- specify manifest fields -->
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.3.2</version>
    <configuration>
        <archive>
            <manifestEntries>
                <Specification-Title>${project.name}</Specification-Title>
                <Specification-Version>${project.version}</Specification-Version>
                <Specification-Vendor>${project.specification_vendor}</Specification-Vendor>
                <Implementation-Title>${project.groupId}.${project.artifactId}</Implementation-Title>
                <Implementation-Version>${git.revision}</Implementation-Version>
                <Implementation-Vendor>${project.implementation_vendor}</Implementation-Vendor>
                <X-Git-Branch>${git.branch}</X-Git-Branch>
                <X-Git-Tag>${git.tag}</X-Git-Tag>
                <X-Git-Commits-Count>${git.commitsCount}</X-Git-Commits-Count>
            </manifestEntries>
        </archive>
    </configuration>
</plugin>

Results exmple (from MANIFEST.MF):

Implementation-Title: ru.concerteza.util.ctz-common-utils
Implementation-Vendor: Con Certeza LLC
Implementation-Version: bc810bdf4665d8a294da0d0efb47d98463bf0ff6
Specification-Title: Con Certeza Common Utilities Library
Specification-Vendor: Con Certeza LLC
Specification-Version: 1.3.7
X-Git-Branch: 
X-Git-Commits-Count: 30
X-Git-Tag: 1.3.7

###Create ready to use buildnumber

Plugin may be configured to produce ready-to-use buildnumber into git.buildnumber property. By default buildnumber created as <tag or branch>.<commitsCount>.<shortRevision>.

Plugin also support custom buildnumber composition using JavaScript. This feature was added by plevart.

JS snippet can be provided to javaScriptBuildnumberCallback configuration property. Snippet will be executed by Rhino JS engine included with JDK6.

Configuration example:

<plugin>
    <groupId>ru.concerteza.buildnumber</groupId>
    <artifactId>maven-jgit-buildnumber-plugin</artifactId>
    <version>1.2.9</version>
    <executions>
        <execution>
            <id>git-buildnumber</id>
            <goals>
                <goal>extract-buildnumber</goal>
            </goals>
            <phase>prepare-package</phase>
            <configuration>
                <javaScriptBuildnumberCallback>
                    tag + "_" + branch + "_" + revision.substring(10, 20) + "_" + shortRevision + "_" + commitsCount*42
                </javaScriptBuildnumberCallback>
            </configuration>
        </execution>
    </executions>
</plugin>

tag, branch, revision, shortRevision and commitsCount are exposed to JavaScript as global variables (commitsCount as numeric).

Script engine is initialized only if javaScriptBuildnumberCallback is provided so it won't break cross-platform support.

If JS snippet failed to execute, it won't break build process, Rhino error will be printed to Maven output and all properties will get "UNKNOWN" values.

###Maven properties configuration:

  • revisionProperty, default: git.revision
  • branchProperty, default: git.branch
  • tagProperty, default: git.tag
  • commitsCountProperty, default: git.commitsCount
  • buildnumberProperty, default: git.buildnumber
  • repositoryDirectory - directory to start searching git root from, should contain '.git' directory or be a subdirectory of such directory, deafault: ${project.basedir}
  • runOnlyAtExecutionRoot: setting this parameter to 'false' allows to execute plugin in every submodule, not only in root one. Default: true. This feature was added by bradszabo.

Usage in Ant

To use buildnumber ant task you need this jars on your classpath:

  • jgit-buildnumber-ant-task-1.2.9.jar
  • org.eclipse.jgit-2.0.0.201206130900-r.jar

Project directory that contains .git directory may be provided with git.repositoryDirectory property. Curent work directory is used by defuault.

Extracted properties are put into:

  • git.tag
  • git.branch
  • git.revision
  • git.shortRevision
  • git.commitsCount

build.xml usage snippet:

<target name="git-revision">
    <taskdef name="jgit-buildnumber" classname="ru.concerteza.util.buildnumber.JGitBuildNumberAntTask" classpathref="lib.static.classpath"/>
    <jgit-buildnumber/>
    <echo>Git version extracted ${git.commitsCount} (${git.shortRevision})</echo>
</target>

###Ready to use buildnumber

Default buildnumber in form <tag or branch>.<commitsCount>.<shortRevision> will be put into property git.buildnumber. If you want to customize it, you can use Ant Script task like this:

<target name="git-revision">
    <taskdef name="jgit-buildnumber" classname="ru.concerteza.util.buildnumber.JGitBuildNumberAntTask" classpathref="lib.static.classpath"/>
    <jgit-buildnumber/>
    <script language="javascript">
        var tag = project.getProperty("git.tag")
        var revision = project.getProperty("git.shortRevision")
        var buildnumber = tag + "_" + revision
        project.setProperty("git.buildnumber", buildnumber)
    </script>
</target>

Common errors

This exceptions will be reported by JGit if provided repositoryDirectory directory doesn't contain Git repository.

java.lang.IllegalArgumentException: One of setGitDir or setWorkTree must be called

License information

This project is released under the Apache License 2.0




鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap