這個 Gradle 插件可用於自動壓縮您的 bootJar 和 bootstrap 文件爲一個滿足阿里雲 函數計算 自定義運行時 的 zip 包.
使用這個插件後, 它將自動搜索 ${PROJECT_DIR}
和 ${PROJECT_DIR}/bootstrap
文件夾下的 bootstrap 文件, 並生成對應的 Gradle 任務.
項目地址: https://github.com/XieEDeHeiShou/fc-custom-runtime-packer, 歡迎 Star, Fork, Issue, PR.
Gradle 插件開發 QQ 羣: 959860873
如何安裝
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.目前可接收的值是
#!/bin/bash
和#!/usr/bin/env sh
.- 如果它缺少或含有無效的 shebang command,
#!/bin/bash
將被前置到生成的 bootstrap 文件中.
- 如果它缺少或含有無效的 shebang command,
- 它可以被授予可執行權限.
- 因爲壓縮包內的 bootstrap 文件是一個生成的文件, 並不是原來的那個, 因此源文件持有的可執行權限將被忽略, 並且生成的 bootstrap 的文件模式將被設爲 775.
- 如果存在多個有相同配置 (profile) 的 bootstrap 文件, 那麼運行的過程中將拋出 DuplicateBootstrapProfileException 異常.
參考文獻
Spring boot gradle plugin @github.com
How to get project version in custom gradle plugin @stackoverflow.com
Unix file mode @tutorialspoint.com