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)'
Scope 篩選
# 測試範圍的依賴 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)— 分兩次執行
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)'