Java 在基于Gradle的Spring Rest项目中添加提交到清单

Java 在基于Gradle的Spring Rest项目中添加提交到清单,java,git,gradle,Java,Git,Gradle,我想在构建jar时将提交散列添加到清单中 背景如下: 我有一个基于gradle的项目,它具有Spring boot依赖项。这是一个RESTapi项目。这是我的假设:我尝试的所有插件都被Spring依赖项提供的buildJar任务覆盖 所以我的问题是, 如何通过在项目中定义一个非常简单的渐变任务,将提交哈希添加到清单中? 我已经知道如何使用以下任务打印最后一个哈希 task getHash { def p1 = 'git rev-parse HEAD'.execute() p1.w

我想在构建
jar
时将提交散列添加到
清单中

背景如下:

我有一个基于
gradle
的项目,它具有
Spring boot
依赖项。这是一个
REST
api项目。这是我的假设:我尝试的所有插件都被
Spring
依赖项提供的
buildJar
任务覆盖

所以我的问题是,

如何通过在项目中定义一个非常简单的渐变任务,将提交哈希添加到清单中?

我已经知道如何使用以下任务打印最后一个哈希

task getHash {
    def p1 = 'git rev-parse HEAD'.execute()
    p1.waitFor()
    println p1.text
}
以下是
build.gradle
详细信息:

buildscript {
    ext {
        springBootVersion = '2.0.5.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

apply plugin: 'java'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

group = 'com.foo.bar'
version = '0.0.4-SNAPSHOT'
sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    // Spring dependencies
    compile('org.springframework.boot:spring-boot-starter-web')

    //Clickhouse-jdbc
    compile group: 'ru.yandex.clickhouse', name: 'clickhouse-jdbc', version: '0.1.40'

    // Swagger
    compile group: 'io.springfox', name: 'springfox-swagger2', version: '2.9.2'
    compile group: 'io.springfox', name: 'springfox-swagger-ui', version: '2.9.2'


    // https://mvnrepository.com/artifact/org.json/json
    compile group: 'org.json', name: 'json', version: '20180813'

    testCompile('org.springframework.boot:spring-boot-starter-test')
}

Spring boot提供了一个
bootJar
扩展,可用于配置清单:

bootJar {
    manifest {
        attributes(
            "GIT_REV": getHash()
        )
    }
}
您可以将
getHash()
定义为构建脚本中的一个简单函数:

ext.getHash = {
    def p1 = 'git rev-parse HEAD'.execute()
    p1.waitFor()
    return p1.text
}
参考:见


注意:这个简单的例子不应该是复制粘贴:你应该在构建阶段,而不是在配置阶段调用
getHash()
方法。

如果你使用SpringBoot gradle插件来生成胖jar,然后你可以使用
bootJar
configuration扩展来配置这个胖jar的清单,见下面我的答案。效果很好!谢谢