Gradle发布配置新增构件后主Spring Boot构件损坏问题排查
问题原因
当你在bootJava这个MavenPublication中手动添加多个artifact后,Gradle会重置该发布的主构件配置——不再沿用Spring Boot插件预设的bootJar作为主产物,而是默认使用Java插件生成的普通Jar(这个Jar只包含编译后的class文件,没有Spring Boot所需的BOOT-INF等目录)作为主构件,所以你看到的主Jar结构异常。
修复方案
有两种可靠的修复方式,任选其一即可:
方式一:明确标记bootJar为主构件
在添加bootJar的artifact时,通过primary = true明确指定它是主构件,避免Gradle自动切换成普通Jar:
publishing { publications { bootJava(MavenPublication) { artifact(bootJar) { primary = true // 标记为主构件 } artifact('build/swagger.zip') { classifier 'swagger-api-docs' } artifact(clientJar) { classifier 'client' } } } }
方式二:继承Spring Boot预设的发布配置
使用from components.bootJava来继承Spring Boot插件为bootJava发布预设的主构件配置(已经默认把bootJar设为主产物),再添加额外的构件:
publishing { publications { bootJava(MavenPublication) { from components.bootJava // 继承预设的bootJar主构件配置 artifact('build/swagger.zip') { classifier 'swagger-api-docs' } artifact(clientJar) { classifier 'client' } } } }
两种方式都能保证主构件依然是带BOOT-INF目录的Spring Boot可执行Jar,同时正常发布额外的Swagger文档和客户端Jar。
内容的提问来源于stack exchange,提问作者user2572526
相关产品推荐
相关产品推荐

