2
回答
Gradle4.7编译Spring Boot Stater时,不产出META-INF/spring-configuration-metadata.json
百度AI开发者大赛带你边学边开发,赢100万奖金,加群:418589053   

之前使用的是Gradle 4.4.1, 一切正常, 今天升级到了4.7, 结果自己编写的starter, 打包发布之后, 发现缺少META-INF/spring-configuration-metadata.json文件,导致在开发依赖这些starter的项目中的application.yml的时候没有属性提示, 反而警告说属性找不到。

国内外的网站上都没有相关的说明, gradle的github issue列表中都没有相关的, 项目文件中build/classes/java/main/META-INF/spring-configuration-metadata.json缺少,导致打包缺少。

下面的都尝试过,觉得这样写不优雅很麻烦,但是也还是解决不了问题。

compileJava.dependsOn(processResources)

    compileJava {
        doLast {
            file('out/production/classes/META-INF/spring-configuration-metadata.json').renameTo(file('build/classes/java/main/META-INF/spring-configuration-metadata.json'))
        }
    }

编译过程中没有错误,没有警告。

目前回滚回了4.4.1版本,依赖这些starter的项目没有回滚,可以正确提示。

举报
aviator
发帖于3个月前 2回/422阅

With Gradle 4.5 and earlier, the dependency should be declared in the compileOnly configuration, as shown in the following example:

dependencies {
	compileOnly "org.springframework.boot:spring-boot-configuration-processor"
}

With Gradle 4.6 and later, the dependency should be declared in the annotationProcessor configuration, as shown in the following example:

dependencies {
	annotationProcessor "org.springframework.boot:spring-boot-configuration-processor"
}

If you are using an additional-spring-configuration-metadata.json file, the compileJava task should be configured to depend on the processResourcestask, as shown in the following example:

compileJava.dependsOn(processResources)
顶部