새로운 프로그래밍 언어 또는 패키지 매니저 지원을 추가하는 방법을 단계별로 설명합니다.
새로운 언어/패키지 매니저를 추가하기 전에 다음 사항을 먼저 확인하세요.
cdxgen 지원 여부: cdxgen 지원 언어 목록을 확인합니다. cdxgen이 이미 지원한다면 Docker 이미지에 런타임만 추가하면 됩니다.
syft 지원 여부: 바이너리/이미지 분석이 필요한 경우 syft 지원 형식을 확인합니다.
커스텀 분석기 필요 여부: 두 도구 모두 지원하지 않는 경우, 커스텀 분석 스크립트를 작성해야 합니다.
docker/Dockerfile을 수정하여 필요한 런타임을 추가합니다.
# 예: 특정 런타임 설치
RUN curl -s "https://get.sdkman.io" | bash && \
source "$HOME/.sdkman/bin/sdkman-init.sh" && \
sdk install kotlinJVM 기반 언어(Kotlin 등)라면 이미 설치된 JDK를 재활용할 수 있습니다.
examples/ 디렉토리에 예제 프로젝트를 추가합니다.
examples/kotlin/
├── README.md # 예제 설명 (국문)
├── build.gradle.kts # 빌드 파일
├── gradle.lockfile # 잠금 파일 (필수!)
└── src/main/kotlin/
└── Main.kt
잠금 파일이 중요한 이유: cdxgen은 잠금 파일에서 정확한 버전 정보를 추출합니다. 잠금 파일이 없으면 의존성이 불완전하게 탐지됩니다.
tests/cases/test-{언어}.sh 파일을 생성합니다. (테스트 가이드 참고)
#!/usr/bin/env bash
set -euo pipefail
source "$(dirname "$0")/../helpers/assert.sh"
source "$(dirname "$0")/../helpers/setup.sh"
TEST_NAME="Kotlin Gradle 소스 코드 분석"
EXAMPLE_DIR="examples/kotlin"
setup_test "$TEST_NAME"
run_scan \
--project "KotlinExample" \
--version "1.0.0" \
--target "$EXAMPLE_DIR" \
--generate-only
assert_file_exists "KotlinExample_1.0.0_bom.json"
assert_json_field ".bomFormat" "CycloneDX"
assert_json_field ".specVersion" "1.4"
assert_components_count_gte 1
assert_purl_prefix "pkg:maven/"
teardown_test그 다음, tests/test-scan.sh에 새 테스트를 등록합니다.
source "$(dirname "$0")/cases/test-kotlin.sh"새로운 언어를 추가하면 아래 문서를 업데이트해야 합니다.
README.md — 지원 언어 표에 추가:
| **Kotlin** | Gradle | cdxgen |docs/examples-guide.md — 새 언어 섹션 추가 (다른 언어 예시 형식 참고)
docs/usage-guide.md — 트러블슈팅의 "언어 미감지" 표에 추가:
| Kotlin | `build.gradle.kts` + `gradle.lockfile` |기여 가이드에 따라 PR을 제출합니다. PR 본문에 다음을 포함하세요.
- 추가한 언어/패키지 매니저 이름
- 테스트 실행 결과 (스크린샷 또는 로그)
- 예제 SBOM 출력 샘플
Kotlin은 Gradle 빌드 시스템을 사용하며, JVM 기반이므로 기존 JDK 런타임을 재활용할 수 있습니다.
cd examples/kotlin
# build.gradle.kts에 의존성 잠금 설정 추가
cat >> build.gradle.kts << 'EOF'
dependencyLocking {
lockAllConfigurations()
}
EOF
# 잠금 파일 생성
./gradlew dependencies --write-locks{
"components": [
{
"type": "library",
"name": "kotlin-stdlib",
"version": "1.9.21",
"purl": "pkg:maven/org.jetbrains.kotlin/kotlin-stdlib@1.9.21"
}
]
}Kotlin은 Maven 생태계를 공유하므로 PURL은 pkg:maven/ 접두사를 사용합니다.
새로운 언어 지원 PR을 제출하기 전에 모든 항목을 확인하세요.
-
docker/Dockerfile에 런타임이 추가되었습니다. -
examples/{언어}/예제 프로젝트가 있습니다. - 예제 프로젝트에 잠금 파일이 포함되어 있습니다.
-
tests/cases/test-{언어}.sh테스트가 작성되었습니다. -
tests/test-scan.sh에 테스트가 등록되었습니다. -
./tests/test-scan.sh전체가 통과합니다. -
README.md지원 언어 표가 업데이트되었습니다. -
docs/examples-guide.md에 예제 섹션이 추가되었습니다. -
docs/usage-guide.md트러블슈팅 표가 업데이트되었습니다.