| .. | ||
| classifier | ||
| maven-lockfile | ||
| reactor | ||
| README.md | ||
Fixturi Maven (Proof of Software 1.6.0, sbom-maven)
Fisiere REALE scrise de pluginul maven-lockfile (io.github.chains-project:maven-lockfile), extrase cu git show (octetii COMISI, fara
conversia de checkout) din depozitul public https://github.com/chains-project/maven-lockfile la commitul
083b879a2202189aea2b29b47c52ef649b5e4289 (2026-10-16T23:15:34+02:00), pe 2026-10-18. Clona sta in afara depozitului nostru, numai de
citit; nimic nu a rulat din ea (nici mvn, nici alt interpretor). Amprentele de mai jos sunt ale octetilor extrasi si sunt identice cu ale
bloburilor din git (verificat cu git show ... | sha256sum). Dosarul e marcat -text in .gitattributes, ca un checkout cu
core.autocrlf=true sa nu le schimbe octetii (proba compara SHA-256 al pom.xml de pe disc cu pom.checksum din lockfile).
| fixtura | calea in depozitul sursa | pluginul care a scris-o (metaData.config) |
sha256 | octeti |
|---|---|---|---|---|
maven-lockfile/lockfile.json |
lockfile.json (radacina: lockfile-ul propriu al pluginului) |
5.18.6, checksumMode: remote, hermetic: true, includeBoms, includeParentPom |
f94e6a78e9680d93089342dd5a922cf89508a7c921433ba75695e34ccc97acf1 |
1453087 |
maven-lockfile/pom.xml |
pom.xml |
da144afab3256a91113eeca080f9b0836b7615c43327bdcdf40f2db1460a53ce |
18006 | |
reactor/pom.xml |
src/test/resources-its/it/IntegrationTestsIT/reactorSnapshotSiblingShouldSucceed/pom.xml (agregator, <modules>) |
2c5e3529a91fa1289e348d7e7dbb7d2bcea6998882b163c474382a75f4b3daca |
516 | |
reactor/module-a/pom.xml |
.../reactorSnapshotSiblingShouldSucceed/module-a/pom.xml |
fe5fd57c834ef8943fc6903fe2343708c920ee9e796de245c92e880bfe42be2b |
1028 | |
reactor/module-a/lockfile.json |
.../reactorSnapshotSiblingShouldSucceed/module-a/lockfile.json (dependinta de modul-frate din acelasi reactor, checksum gol) |
5.17.1-SNAPSHOT, local |
41de249b2fc9c6fc18777f2b0d589e6462da07040590806c5a17ba3efabcb233 |
2007 |
reactor/module-b/pom.xml |
.../reactorSnapshotSiblingShouldSucceed/module-b/pom.xml (fara lockfile comis) |
ff80de0e2f3e3f4cb108ba102e51e927f33ee4bf7c57de7de9e9fa814355b32c |
288 | |
classifier/lockfile.json |
.../classifierDependencyCheckCorrect/lockfile.json (acelasi artefact simplu, sources si javadoc) |
5.14.3-SNAPSHOT, local |
b21155db575cdeca577889e8ed18421d0f7b13041ada4f7ad4a57b9aade3a672 |
11527 |
classifier/pom.xml |
.../classifierDependencyCheckCorrect/pom.xml |
ffb0ec623d40e3b9655330aa563e8c17ca14b4e33bf3f1ac3803c6a02fdd3dee |
1506 |
Ce contine fixtura mare, numarat cu o parcurgere INDEPENDENTA a lockfile-ului (in test/sbom-maven.test.mjs, alt cod decat pos.mjs):
986 de noduri in arborele proiectului si in cei 17 arbori de plugin; 325 de artefacte distincte (318 incluse + 7 inregistrate dinamic in
modul hermetic, furnizorii surefire, scrise de plugin cu included: false si FARA selectedVersion); 528 de noduri scoase de mediere
(159 pentru conflict, 369 pentru duplicat); 2 cu clasificator (guice:classes, sisu-guice:noaop); 2 cu type: pom; 17 pluginuri; 232 de
pom-uri parinte si 43 de BOM-uri; 617 componente in SBOM, toate cu SHA-256; 4 scope-uri (compile, provided, runtime, test); 13 coordonate
care apar si in arborele proiectului si intr-un arbore de plugin; 23 cu doua scope-uri.
Semantica citita din sursa pluginului (nu din memorie)
src/main/java/io/github/chains_project/maven_lockfile/graph/DependencyGraph.java, LockFileFacade.java, data/*.java, la acelasi commit:
included = winnerVersion.isEmpty()(nu exista marcaj de conflict in arborele verbose al lui Maven);selectedVersion= versiunea castigatoare cand exista marcaj, altfel chiar versiunea nodului. Deciincluded: falsecuselectedVersion == versione "omis pentru duplicat", cu alta versiune e "omis pentru conflict"; niciunul nu ajunge pe classpath, parintele primeste versiunea aleasa.- artefactele inregistrate dinamic (
addDynamicDependency, modul hermetic) se construiesc cuDependencyNode.of(...)farasetIncluded/setSelectedVersion: in JSONincluded: falsesi faraselectedVersion. Sunt rezolvate, nu mediate. ArtifactType.of("jar")siClassifier.of("")dau null, decitypesiclassifierlipsesc din JSON cand sunt jar, respectiv goale.- checksum-ul e gol pentru radacina si pentru modulele SNAPSHOT din acelasi reactor (
reactorGavs), altfel e hash-ul fisierului:remoteil citeste din depozitul de artefacte,localil calculeaza pe fisier (FileSystemChecksumCalculator, implicit SHA-256). pom.checksume hash-ul fisieruluipom.xmldin care s-a generat lockfile-ul.
Controale pozitive ale metodei, masurate 2026-10-18
pom.checksumdinmaven-lockfile/lockfile.json== SHA-256 alpom.xmlCOMIS (da144afa...): deciaere:maven-pom-matches-lockfilemasoara ceva real. Proba o recalculeaza in test, independent depos.mjs.- checksum-ul din lockfile == sidecar-ul
.sha256publicat de Maven Central (citit ca text, nu descarcat):gson-2.14.0.jar2cbd119bf1961c28788310963dc80ba65f58cdeec1dd139c8bdb1240faa2c36f,guava-33.5.0-jre.jar1e301f0c52ac248b0b14fdc3d12283c77252d4d6f48521d572e7d8c4c2cc4ac7,gson-parent-2.14.0.pom82b0f6694c5758ab8bb07e05630208d50f589d4b5e04fd0a046d59cdf7ba3d1d. Deci checksum-ul e hash-ul FISIERULUI si intra inhashesCycloneDX. - Masina de lucru nu are
~/.m2/repository, deci proba cu jar-urile din memoria locala Maven e SARITA aici si ruleaza unde exista.
Dogfood pe depozitul public, 2026-10-18
Pe clona 1 (083b879a, checkout superficial) si pe o a DOUA clona proaspata a aceluiasi depozit, FARA checkout (numai obiecte git, 44 MB),
cu sbomMavenFromTree / attest / verify din pos.mjs chemate dintr-un script din afara clonelor (in clone a intrat numai git):
- SBOM din clona 1,
--source-path .(lockfile-ul e la radacina depozitului): 617 componente (71 dependinte, 17 pluginuri, 267 dependinte de plugin, 232 pom-uri parinte, 43 BOM-uri), 617 cu SHA-256, 218 inregistrari de graf, 4 scope-uri, 159/369 noduri omise pentru conflict/duplicat, 7 dinamice,pom.xml matches lockfile: true, 452.104 octeti; 131 ms (a doua rulare 119 ms, aceiasi octeti). - Din clona 2: aceiasi octeti, 117 ms. Serialul
urn:uuid:125f2369-0208-518b-84a9-37538ef0fd9ae derivat din continut. - Atestare cu
source.path ".", arborele79b9c003543c;verify --rebuild-from <clona 2>: VALID in 487 ms ("the attested SBOM says what the committed lockfile.json (maven-lockfile) resolves (617 components)"); artefactul e un stand-in declarat (nu a rulat niciun build Maven), deci "rebuild: artifacts" e ABSENT, nu fals. - Control negativ: componentele numite
gsonscoase de mana din SBOM-ul atestat (sunt doua: 2.13.2 si 2.14.0): VALID pe digest, INVALID la reconstructie ("0 component(s) only in the attested SBOM, 2 only in the lockfile; graph same; root same").
NEMASURAT: un lockfile scris cu reduced: true (fara noduri mediate) si unul cu mavenExtensions nevid; cititorul le accepta dupa
aceeasi schema, dar nicio fixtura reala de aici nu le are. Niciun alt depozit public decat al pluginului nu a fost gasit cu lockfile.json
comis (cautare web, 2026-10-18), deci un lockfile scris de alt proiect, cu alte optiuni, nu a fost citit.