Maven POM 쿼리 패턴
<when_to_use>
pom.xml 파일을 쿼리할 때 이 스킬을 로드하세요 — 의존성 버전 추출, groupId 또는 scope로 필터링, 부모 POM에서 모듈 계층 구조 매핑, 또는 다중 모듈 Java 프로젝트에서 버전 충돌 탐지가 필요할 때 사용합니다.
</when_to_use>
dasel v3를 사용하여 Maven POM XML 파일을 쿼리하기 위한 도메인 스킬입니다. 항상 명시적으로 -i xml 플래그를 전달하세요. 자식 요소 텍스트 내용(groupId, artifactId, version, scope)은 요소 이름으로 직접 접근합니다 — #text가 필요하지 않습니다. 중간 배치 결과는 /tmp/에 쓰고, 소스 트리에는 절대 쓰지 마세요.
의존성 추출
# 단일 POM에서 모든 의존성 groupId
cat pom.xml | dasel -i xml 'project.dependencies.dependency.map(groupId)'
프레임워크 버전 필터링
groupId로 의존성을 필터링하여 프레임워크별 버전을 분리합니다.
# Spring 의존성 버전
cat pom.xml | dasel -i xml 'project.dependencies.dependency.filter(groupId == "org.springframework").map(version)'
# Hibernate 의존성 버전
cat pom.xml | dasel -i xml 'project.dependencies.dependency.filter(groupId == "org.hibernate").map(version)'
스코프 필터링
# Test 스코프 의존성 artifactId
cat pom.xml | dasel -i xml 'project.dependencies.dependency.filter(scope == "test").map(artifactId)'
# Compile 스코프 의존성 (scope 요소가 없으면 기본값 compile)
cat pom.xml | dasel -i xml 'project.dependencies.dependency.filter(scope == "compile").map(artifactId)'
모듈 계층 구조
부모 POM에서 모듈 경로를 추출하여 프로젝트 구조를 매핑합니다.
# 부모 POM의 모듈 목록
cat pom.xml | dasel -i xml 'project.modules.module'
POM 간 버전 충돌 탐지
배치 패턴 — 모든 POM을 반복하여 파일별 의존성을 추출하고 비교합니다. 결과는 /tmp/에 씁니다.
# 계층 구조의 모든 POM에서 모든 의존성 groupId 수집
for pom in $(fdfind -e xml -n pom.xml .); do
echo "=== $pom ===" >> /tmp/all_deps.txt
cat "$pom" | dasel -i xml 'project.dependencies.dependency.map(groupId)' >> /tmp/all_deps.txt 2>/dev/null
done
/tmp/all_deps.txt를 검사하여 모듈 간에 동일한 groupId가 다른 버전으로 나타나는지 확인합니다.
다중 필드 추출
의존성 인벤토리를 위해 groupId와 artifactId를 함께 추출합니다.
# 의존성 좌표 (groupId + artifactId) — 두 번 실행하여 처리
cat pom.xml | dasel -i xml 'project.dependencies.dependency.map(groupId)'
cat pom.xml | dasel -i xml 'project.dependencies.dependency.map(artifactId)'
DependencyManagement vs Dependencies
엔터프라이즈 POM은 dependencyManagement를 사용하여 BOM으로 제어되는 버전을 활성 dependencies와 별도로 선언합니다.
# 관리되는 의존성 버전 (BOM 섹션)
cat pom.xml | dasel -i xml 'project.dependencyManagement.dependencies.dependency.map(version)'
# 활성 의존성 버전 (버전이 BOM에서 오는 경우 비어 있을 수 있음)
cat pom.xml | dasel -i xml 'project.dependencies.dependency.map(version)'