[Fc] 阿里云函数计算自定义运行时Gradle自动打包插件

在这里插入图片描述

简介

本博客站点已全量迁移至 DevDengChao 的博客 https://blog.dengchao.fun , 后续的新内容将优先在自建博客站进行发布, 欢迎大家访问.

这个 Gradle 插件可用于自动压缩您的 bootJar 和 bootstrap 文件为一个满足阿里云 函数计算 自定义运行时 的 zip 包.

使用这个插件后, 它将自动搜索 ${PROJECT_DIR}${PROJECT_DIR}/bootstrap 文件夹下的 bootstrap 文件, 并生成对应的 Gradle 任务.

项目地址: https://github.com/DevDengChao/fc-custom-runtime-packer, 欢迎 Star, Fork, Issue, PR.

欢迎加入 Gradle 插件开发 交流群: 959860873
欢迎加入 Spring cloud 交流群: 617143034

如何安装

buildscript {
    repositories {
        maven { url "https://plugins.gradle.org/m2/" }
    }
    dependencies {
        classpath "dev.dengchao:fc-custom-runtime-packer:x.y.z" // 请将 x.y.z 替换成这个插件实际的版本号
    }
}

version 'your-project-version'

// 这个插件*必须*添加在 version 字段下方才能正确生效
apply plugin: "dev.dengchao.fc-custom-runtime-packer"

如何使用

项目结构

我们假设您有一个类似下方结构的 Spring 项目:

project dir
+--- bootstrap
|       +--- bootstrap-pro  (1)
|       \--- dev            (2)
+--- build
+--- src
+--- bootstrap.sh           (3)
+--- build.gradle           (plugin applyed)

运行 gradle :zipBootstrap 任务后, 您将得到一个常规的 bootJar 文件, 三个配置好的启动压缩包(bootstrap zip):

project dir
+...
+--- build
|       \--- libs
|               +--- demo-1.0.0.jar                     (bootJar)
|               +--- demo-1.0.0-default.zip
|               |       +--- bootstrap                  (generated from 3) 
|               |       \--- demo-1.0.0.jar
|               +--- demo-1.0.0-dev.zip
|               |       +--- bootstrap                  (generated from 2) 
|               |       \--- demo-1.0.0.jar
|               \--- demo-1.0.0-pro.zip
|                       +--- bootstrap                  (generated from 1) 
|                       \--- demo-1.0.0.jar
+...

更进一步的, 您也可以通过运行 gradle :zipBootstrapDefault 任务对默认配置 (profile) 进行打包, 其他配置也是如此.

Bootstrap 文件规范

  • 它的内容可以包含一个或多个占位符 archiveboot.jar, 这些占位符将被实际的 bootJar 文件名替代. 例如: java -jar archive 将会生成 java -jar demo-1.0.0.jar.
  • 如果它像 (3) 一样位于项目文件下, 那么它的名字必须满足正则表达式 bootstrap(-[a-zA-Z0-9\-]+)?(\.sh)?.
    • 如果存在配置 (profile) (-[a-zA-Z0-9\-]+) , 它将生成一个 ${PROJECT_NAME}-${PROJECT_VERSION}-${PROFILE}.zip 压缩包.
    • 如果配置不存在, 它将生成一个 ${PROJECT_NAME}-${PROJECT_VERSION}-default.zip 压缩包.
  • 如果它像 (1) 和 (2) 一样位于 bootstrap 文件夹下, 那么它的名字必须满足正则表达式 ([a-zA-Z0-9\-]+)(\.sh)?.
    • 如果存在 ‘bootstrap-’ 前缀, 那么这个前缀将从配置名中被移除.
  • 它的内容可以声明自己的 shebang command.目前可接收的值是 #!/bin/bash#!/usr/bin/env sh.
    • 如果它缺少或含有无效的 shebang command, #!/bin/bash 将被前置到生成的 bootstrap 文件中.
  • 它可以被授予可执行权限.
    • 因为压缩包内的 bootstrap 文件是一个生成的文件, 并不是原来的那个, 因此源文件持有的可执行权限将被忽略, 并且生成的 bootstrap 的文件模式将被设为 775.
  • 如果存在多个有相同配置 (profile) 的 bootstrap 文件, 那么运行的过程中将抛出 DuplicateBootstrapProfileException 异常.

参考文献

Spring boot gradle plugin @github.com

How to get project version in custom gradle plugin @stackoverflow.com

Shebang @wikipedia.org

Unix file mode @tutorialspoint.com

阿里云函数计算自定义运行时原理 @aliyun.com

推广

欢迎加入 Gradle 插件开发 交流群: 959860873
欢迎加入 Spring cloud 交流群: 617143034
欢迎大家使用我的其他作品: IDEA 插件 MVPHelper

欢迎大家使用 阿里云优惠券, 新购续费更优惠:
限量阿里云优惠券

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值