npm / Yarn / pnpm
PyPI
Go modules
Maven / Gradle / SBT
NuGet
RubyGems
crates.io (Cargo)
Packagist / Composer
Hex (Elixir)
Pub (Dart/Flutter)
Swift
Haskell (Hackage)
R (CRAN)
Como a resolução funciona
O ZeroPath resolve seu grafo de dependências diretamente a partir dos seus manifestos sempre que possível, sem exigir etapa de build ou contêiner, e recorre ao seu lockfile commitado em todos os outros casos. O contrato prático é por ecossistema, resumido na tabela abaixo. Duas regras valem em todos os lugares:- Dependências diretas são escaneadas mesmo quando o grafo transitivo não pode ser construído. O ZeroPath registra e compara com vulnerabilidades os pacotes que você declarou diretamente, então um lockfile ausente custa a profundidade transitiva, não as suas descobertas diretas.
- Versões desconhecidas não são adivinhadas. Se uma versão não pode ser determinada, por exemplo um intervalo não resolvido ou uma cadeia de pais quebrada, o pacote ainda é registrado no seu inventário e SBOM, mas não é comparado com vulnerabilidades. Isso evita falsos positivos causados por versões adivinhadas.
Cobertura sem um lockfile commitado
Artefatos compilados e vendorizados
Artefatos JVM binários commitados no seu repositório, como JARs e WARs, são escaneados em busca dos pacotes embutidos dentro deles. Esses pacotes aparecem no seu inventário ao lado das dependências declaradas em código-fonte, com um selo de tipo de origem Compiled (por exemplo, JAR, WAR), para que você veja bibliotecas vendorizadas ou pré-compiladas que uma análise apenas de manifestos deixaria passar. O inventário de Dependencies permite filtrar por Source Type para isolar descobertas compiladas vs. declaradas em código-fonte.Notas por ecossistema
Go modules
Go modules
O ZeroPath trata o sufixo
+incompatible usado por pacotes Go pré-módulos
(versão principal 2+), pareando versões como v3.2.0+incompatible com
advisories conhecidos. Pseudo-versões do Go (por exemplo,
v0.0.0-20231215084216-abcdef123456) são snapshots de commit, não releases
publicados, então o ZeroPath as registra no inventário mas não tenta parear
versões de advisories com elas.Maven
Maven
Builds multi-módulo (reactor) são totalmente resolvidos: o ZeroPath indexa
cada POM no repositório e resolve referências
<parent> entre módulos mesmo
quando <relativePath/> está vazio ou ausente, de modo que um filho pode
herdar versões de <dependencyManagement> do pai de um irmão. POMs pai que
declaram dependências apenas em <dependencyManagement> são capturados, e
artefatos com classifier são atribuídos ao pacote correto. Quando um POM pai
não pode ser resolvido local ou remotamente, versões herdadas por meio dessa
cadeia são tratadas como não resolvidas em vez de adivinhadas.Gradle
Gradle
Além das declarações simples em
build.gradle(.kts), o ZeroPath também
reconhece dependências declaradas por meio de catálogos de versões
(libs.versions.toml), convention plugins, restrições de platform/BOM e o
Kotlin DSL. Faça commit de gradle.lockfile
(./gradlew dependencies --write-locks) para a árvore transitiva completa.SBT (Scala)
SBT (Scala)
O ZeroPath registra dependências diretas a partir do
build.sbt e analisa um
lockfile commitado para a árvore transitiva completa: build.sbt.lock
(sbt-dependency-lock) ou
lock.sbt (sbt-lock).NuGet
NuGet
Os ids de pacote são pareados sem diferenciar maiúsculas de minúsculas, então
diferenças de capitalização entre um manifesto e o registro nunca causam uma
perda. Opte pelo modo de lockfile do NuGet e faça commit de
packages.lock.json (dotnet restore --use-lock-file --force-evaluate,
NuGet 4.9+) para cobertura transitiva.Cargo (Rust)
Cargo (Rust)
Crates binários commitam
Cargo.lock por padrão, e o ZeroPath o usa
diretamente. Crates de biblioteca comumente o omitem (conforme a orientação
do Cargo); faça commit de Cargo.lock (cargo generate-lockfile) para
cobertura transitiva. Um crate que resolve para múltiplas versões no mesmo
grafo é reportado como pares (name, version) separados, de modo que cada um
chega ao pareamento com advisories.Formatos de manifesto Python
Formatos de manifesto Python
Todos os formatos comuns são suportados:
- requirements.txt — formato padrão do pip
- Pipfile — Pipenv (
[packages]/[dev-packages]) - pyproject.toml (Poetry) — incluindo dependências de grupo do 1.2+
- pyproject.toml (PEP 621) — a tabela
[project]usada por uv, hatch, flit, setuptools e pdm (tantodependenciesquantooptional-dependencies)
Cada descoberta registra a posição de um pacote no grafo (direto ou transitivo) e
a cadeia que o introduziu, e linka de volta para o arquivo de manifesto e a linha
exatos onde a dependência foi declarada, em vez do lockfile. Um pacote alcançado
por múltiplos caminhos de dependência é deduplicado em uma única entrada de
inventário, de modo que as contagens refletem pacotes únicos. Veja
Raio de impacto para saber como a cadeia de dependência
se torna impacto em pontos de chamada durante um upgrade.