Spring分层Fat Jar和Gradle插件layertools jarmode

时间:2020-06-09 17:13:23

标签: java spring spring-boot gradle jar

Spring Boot 2.3.0具有分层的胖子罐,这些胖子罐已针对容器映像构建进行了优化。现在,Spring文档仅讨论Maven构建工具,而不讨论Gradle。

请问,我们需要对Gradle插件做些什么,以使其能够为弹簧靴构建“分层罐”?

例如:如果使用Gradle Spring引导插件java -Djarmode=layertools -jar app.jar extract创建的命令id("org.springframework.boot") version "2.3.0.RELEASE"提取jar,则失败,并显示消息:Unsupported jarmode 'layertools'。基本上,如果jar是使用./gradlew bootJar构建的,则默认情况下似乎分层jar处于不活动状态。

提取分层的jar应该会导致以下目录,然后将这些目录复制到另一个容器映像中以供执行,并且仅当较低的层已更改时,缓存系统才必须重新读取它们。带有-Djarmode=layertools标志的分层jar:

./dependencies/
./snapshot-dependencies/
./resources/
./application/

春季Spring Blog 2.3.0.ML上的博客讨论了Maven构建工具和配置:

<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
    <layout>LAYERED_JAR</layout>
</configuration>

我们如何为Gradle插件启用相同的配置?

2 个答案:

答案 0 :(得分:5)

该文档提供了有关如何使用spring-boot-gradle-plugin激活用于春季启动应用程序的分层胖子的文件。

Packaging Layered Jars with Gradle上查看详细信息。

build.gradle文件中:

// Groovy solution
bootJar {
    layered()
}


// Kotlin solution
tasks.getByName<BootJar>("bootJar") {
    layered()
}

希望这会有所帮助。

答案 1 :(得分:1)

您还可以在此处找到更多信息:

https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/gradle-plugin/reference/html/#packaging-layered-jars

bootJar {
  layered {
    enabled = true

    application {
      intoLayer("spring-boot-loader") {
        include "org/springframework/boot/loader/**"
      }
      intoLayer("application")
    }
    
    dependencies {
      intoLayer("snapshot-dependencies") {
        include "*:*:*SNAPSHOT"
      }
      intoLayer("dependencies")
    }

    layerOrder = ["dependencies", "spring-boot-loader", "snapshot-dependencies", "application"]
  }
}

您会在JAR的layers.idx文件中找到相应的图层名称。