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)'
スコープフィルタリング
# テストスコープの依存関係のartifactId
cat pom.xml | dasel -i xml 'project.dependencies.dependency.filter(scope == "test").map(artifactId)'
# コンパイルスコープの依存関係(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)— 2パスで実行
cat pom.xml | dasel -i xml 'project.dependencies.dependency.map(groupId)'
cat pom.xml | dasel -i xml 'project.dependencies.dependency.map(artifactId)'
DependencyManagement と 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)'