Maven pom.xml Dependency Health Checker | ReleaseRun
Maven pom.xml Dependency Health Checker
Paste your pom.xml dependencies block and get an instant health grade for every Maven dependency — latest versions, how far behind, and which ones need attention.
Checking registry for each package…
| Package |
Current |
Latest |
Grade |
const SAMPLE_POM = `
org.springframework.boot
spring-boot-starter-web
3.0.0
com.fasterxml.jackson.core
jackson-databind
2.14.0
org.apache.commons
commons-lang3
3.12.0
`;
function loadSample(){document.getElementById("input").value=SAMPLE_POM;}
function semverBehind(cur,latest){
try{const c=cur.split(".").map(n=>parseInt(n)||0);const l=latest.split(".").map(n=>parseInt(n)||0);
if(l[0]>c[0])return "major";if(l[1]>c[1])return "minor";if(l[2]>c[2])return "patch";return "current";}
catch(e){return "?";}
}
async function checkMaven(g,a,v){
try{
const url=`https://search.maven.org/solrsearch/select?q=g:%22${g}%22+AND+a:%22${a}%22&rows=1&wt=json`;
const r=await fetch(url);const d=await r.json();
const docs=d.response?.docs||[];
if(!docs.length)throw new Error("not found");
const latest=docs[0].latestVersion||docs[0].v||"?";
const behind=semverBehind(v,latest);
let score=100;
if(behind==="major")score=40;else if(behind==="minor")score=70;else if(behind==="patch")score=85;
const grade=score>=90?"A":score>=75?"B":score>=60?"C":score>=40?"D":"F";
return{latest,behind,grade,score};
}catch(e){return{latest:"?",behind:"?",grade:"?",score:0};}
}
async function check(){
const inp=document.getElementById("input").value.trim();
if(!inp)return;
const err=document.getElementById("error"),loading=document.getElementById("loading"),results=document.getElementById("results");
err.classList.add("hidden");results.classList.add("hidden");loading.classList.remove("hidden");
try{
const parser=new DOMParser();const doc=parser.parseFromString(inp,"text/xml");
const deps=[...doc.querySelectorAll("dependency")].slice(0,50);
if(!deps.length)throw new Error("No dependencies found. Paste a pom.xml dependencies block.");
const pkgs=deps.map(d=>({
g:(d.querySelector("groupId")||{}).textContent||"?",
a:(d.querySelector("artifactId")||{}).textContent||"?",
v:(d.querySelector("version")||{}).textContent||"?"
}));
const checked=await Promise.all(pkgs.map(p=>checkMaven(p.g,p.a,p.v).then(r=>({...p,...r}))));
checked.sort((a,b)=>a.score-b.score);
const needsAttn=checked.filter(p=>["C","D","F"].includes(p.grade)).length;
document.getElementById("summary-text").textContent=`${checked.length} dependencies checked`;
document.getElementById("summary-sub").textContent=`${checked.filter(p=>p.grade==="A").length} up to date · ${needsAttn} need attention`;
const gc={A:"grade-a font-bold",B:"grade-b font-bold",C:"grade-c font-bold",D:"grade-d font-bold",F:"grade-f font-bold"};
const bc={current:"text-green-600",patch:"text-yellow-600",minor:"text-orange-600",major:"text-red-600"};
document.getElementById("table-body").innerHTML=checked.map(p=>`
| ${p.g}:${p.a} |
${p.v} |
${p.latest}${p.behind&&p.behind!=="current"&&p.behind!=="?"?`(${p.behind})`:""} |
${p.grade} |
`).join("");
loading.classList.add("hidden");results.classList.remove("hidden");
}catch(e){loading.classList.add("hidden");err.textContent=e.message;err.classList.remove("hidden");}
}