如何通过init.gradle.kts配置CycloneDX Gradle插件?
用init.gradle.kts配置cyclonedx-gradle-plugin任务属性方案
直接用init脚本就能完成所有配置,无需修改项目本地的build.gradle.kts。以下是完整的实现方案:
完整的init.gradle.kts脚本
// 配置插件仓库,确保能拉取到cyclonedx插件 pluginManagement { repositories { mavenCentral() gradlePluginPortal() } } // 引入cyclonedx-gradle-plugin到init脚本类路径 initscript { repositories { mavenCentral() gradlePluginPortal() } dependencies { classpath("org.cyclonedx:cyclonedx-gradle-plugin:1.7.4") // 替换为你需要的版本 } } // 对所有项目(含子项目)应用插件并配置任务 gradle.allprojects { // 应用cyclonedx bom插件 apply(plugin = "org.cyclonedx.bom") // 统一配置所有CycloneDx类型的任务 tasks.withType<org.cyclonedx.gradle.CycloneDxTask>().configureEach { // 配置BOM schema版本 schemaVersion = "1.4" // 设置项目类型,可选library/application/container等 projectType = "library" // 指定要包含的依赖配置,按需调整 includeConfigs = listOf("runtimeClasspath", "compileClasspath") // 可选:设置输出格式,支持JSON/XML outputFormat = org.cyclonedx.gradle.CycloneDxTask.Format.JSON // 可选:自定义输出文件名 outputName = "cyclonedx-bom" } // 若需对单个任务做差异化配置,比如单独调整cyclonedxDirectBom tasks.named<org.cyclonedx.gradle.CycloneDxTask>("cyclonedxDirectBom") { includeConfigs = listOf("runtimeClasspath") // 仅包含直接运行时依赖 } }
关键配置说明
- initscript块:将cyclonedx插件加入init脚本的类路径,确保所有项目都能加载到插件,无需本地项目声明依赖。
- gradle.allprojects:遍历所有项目(包括子项目)自动应用插件,避免逐个项目配置。
- tasks.withType.configureEach:批量配置所有CycloneDxTask类型的任务,同时覆盖
cyclonedxBom和cyclonedxDirectBom的通用属性。 - 单独任务配置:如果需要针对特定任务做差异化设置,用
tasks.named单独调整即可。
GitLab CI中使用方式
在CI脚本里执行gradle任务时,指定该init脚本路径即可:
dependency-track-scan: stage: dependency-analysis script: # 生成BOM文件 - ./gradlew cyclonedxBom --init-script ./path/to/your/init.gradle.kts # 上传BOM到Dependency Track实例 - curl -X POST -H "X-Api-Key: $DT_API_KEY" -F "bom=@build/reports/bom/cyclonedx-bom.json" "$DT_BASE_URL/api/v1/bom" variables: DT_API_KEY: $DEPENDENCY_TRACK_API_KEY DT_BASE_URL: https://your-dependency-track-instance.com
注意事项
- 插件版本:请替换为最新的cyclonedx-gradle-plugin版本,避免兼容性问题。
- includeConfigs:根据项目的依赖配置调整,比如Spring Boot项目可能需要指定
bootRuntimeClasspath。 - 任务类路径:不同插件版本的任务类路径可能略有差异,若报错请检查类路径是否正确(旧版本可能为
org.cyclonedx.gradle.tasks.CycloneDxTask)。
内容的提问来源于stack exchange,提问作者brunobastosg
相关产品推荐
相关产品推荐

