# 简介
这个 Gradle
插件可用于自动压缩您的 bootJar
和 bootstrap
文件为一个满足阿里云 函数计算 (opens new window) 自定义运行时 (opens new window) 的 zip
包.
使用这个插件后, 它将自动搜索 ${PROJECT_DIR}
和 ${PROJECT_DIR}/bootstrap
文件夹下的 bootstrap 文件, 并生成对应的 Gradle
任务.
项目地址: https://github.com/DevDengChao/fc-custom-runtime-packer (opens new window), 欢迎 Star, Fork, Issue, PR.
欢迎加入 Gradle 插件开发 交流群: 959860873 (opens new window)
欢迎加入 Spring Cloud 交流群: 617143034 (opens new window)
# 如何安装
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 文件规范
- 它的内容可以包含一个或多个占位符
archive
或boot.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
压缩包.
- 如果存在配置 (profile)
- 如果它像 (1) 和 (2) 一样位于
bootstrap
文件夹下, 那么它的名字必须满足正则表达式([a-zA-Z0-9\-]+)(\.sh)?
.- 如果存在 'bootstrap-' 前缀, 那么这个前缀将从配置名中被移除.
- 它的内容可以声明自己的 shebang command (opens new window).
目前可接收的值是
#!/bin/bash
和#!/usr/bin/env sh
.- 如果它缺少或含有无效的
shebang command
,#!/bin/bash
将被前置到生成的bootstrap
文件中.
- 如果它缺少或含有无效的
- 它可以被授予可执行权限.
- 因为压缩包内的
bootstrap
文件是一个生成的文件, 并不是原来的那个, 因此原bootstrap
文件持有的可执行权限将被忽略, 并且生成的bootstrap
的 文件模式 (opens new window) 将被设为775
.
- 因为压缩包内的
- 如果存在多个有相同配置 (profile) 的
bootstrap
文件, 那么运行的过程中将抛出DuplicateBootstrapProfileException
异常.
# 参考文献
Spring Boot gradle plugin @github.com (opens new window)
How to get project version in custom gradle plugin @stackoverflow.com (opens new window)
Shebang @wikipedia.org (opens new window)
Unix file mode @tutorialspoint.com (opens new window)
阿里云函数计算自定义运行时原理 @aliyun.com (opens new window)
# 推广
- 欢迎加入 Gradle 插件开发 交流群: 959860873 (opens new window)
- 欢迎加入 Spring Cloud 交流群: 617143034 (opens new window)
- 欢迎大家使用我的其他作品: IDEA 插件: 使用 MvpHelper v2 生成 MVP 样本代码
- 欢迎大家点击下方图片领取限量 阿里云优惠券 (opens new window), 新购续费更优惠: (opens new window)