Informatii

Scris de Martin Lehmann, Kristine Schaal si Rudiger Grammes

Versiunea 0.3

vezi https://github.com/accso/java9-jigsaw-depvis

Despre ce este vorba?

DepVis vizualizeaza dependentele modulelor Java 9 Jigsaw definite in Project Jigsaw de [JSR 376] (https://www.jcp.org/en/jsr/detail?id=376) si JEP 261. DepVis produce un fisier de iesire GraphViz ( Fisier DOT) care poate fi redat cu GraphViz intr-un pas separat.

Rezultatul arata astfel (in acest caz, toate modulele de sistem Java 9 (versiunea 181) sunt vizualizate cu toate relatiile, limitate la module cu prefixul “java. *”):

DepVis ia in considerare:

  1. Relatii obligatorii / citite (vizualizate in prezent ca o sageata albastra)
    • necesita obligatoriu la java.base (sageata albastra punctata)
    • necesita tranzitive (sageata albastra)
    • necesita statica (sageata albastra punctata)
  2. Necesita tranzitivitate tranzitiva (sageata verde)
    • Daca moda – necesita-tranzitiv -> modb (albastru) si modc – necesita -> moda (albastru), atunci si modc – necesita -> modb (verde). Retineti ca acest lucru este limitat in prezent la 1-tranzitivitate.
  3. Relatii exporturi catre (rosu)
  4. Relatii deschise catre (portocaliu)

Alte indicii:

  1. DepVis poate fi configurat, vezi sectiunea de mai jos.
  2. In coltul din stanga sus este scrisa o legenda. Intrucat, din pacate, rasuceste intregul grafic, acest lucru se face ca un grafic separat.
  3. Este inclus si un instrument de imprimanta care ajuta la imprimarea relatiei cu STDOUT.

Legenda

Aceasta lucrare a fost publicata sub licenta Apache 2.0. Va rugam sa consultati fisierul „LICENTA” pentru detalii suplimentare.

Infiintat

  1. Clonati aceasta repo.
  2. Instalati un Java 9 JDK cu suport Jigsaw. DepVis a fost testat cu Java9 build 181 si, de asemenea, cu 9.0.1-11 (ambele pe Windows 10, x64)
  3. Instalati GraphViz 2.38.
  4. Daca rulati pe Windows, instalati un bash, cum ar fi Babun
  5. Editati fisierul env.sh pentru a configura JAVA_HOME si GRAPHVIZ_HOME (consultati markerii TODO)
  6. Editati, de asemenea, fisierul env.sh pentru a configura separatorul de cai. Daca rulati pe Windows, utilizati; (o bara neagra care citeaza a;). Daca rulati toate lucrurile pe * nix, utilizati doua puncte:.
  7. Apelati clean.sh, compile.sh si run-vis.sh (sau all.sh pentru toate intr-un singur pas).
  8. Iesirea este moduledependencies.dot si moduledependencies.png (si o a doua pereche de fisiere … cu-legenda).

Configurare

DepVis poate fi configurat intr-un fisier de proprietati de configurare (consultati depvis.properties) dupa cum urmeaza:

  1. depvis.

    guarras masturbandose pajas trans
    violada xxx pelis porno españolas
    megan montaner follando maduras americanas
    esposas compartidas incesto madre hijos
    videos prono trio por sorpresa
    xxx incesto real xxx torrent magnet
    madres incestuosas incesto jovencitas
    vecinas cachondas abuelas a cuatro patas
    monica hoyos porno porno español dinero
    pilladas cagando pillados follando
    folladas extremas videos heroticos
    corridas en la garganta suegras españolas follando
    enseñando a follar pilladas cagando
    jolla pr viejas muy calientes
    mujer masturbandose porno por el culo
    violadas xxx travestis meando
    pornolesvianas mujeres peludas follando
    potno peliculas porno traducidas al castellano
    maduras españolas anal peliculas eroticas alemanas
    guarras.com videos porno trios español

    includeFilter

    • Siruri separate prin virgule
    • nume de module lista alba, toate obisnuite sa fie verificate cu String.startsWith
    • daca nu este setat, vor fi utilizate toate modulele din sistem si / sau modul-cale
    • exemplu: java., jdk.
  2. depvis.excludeFilter
    • Siruri separate prin virgule
    • Lista neagra a numelor modulelor, toate erau verificate cu String.startsWith
    • daca nu este setat, vor fi utilizate toate modulele din sistem si / sau modul-cale
    • exemplu: jdk.internal
  3. depvis.useSystemModules
    • boolean, implicit este adevarat
    • vrem sa vizualizam module din sistem (adica java. *, jdk. * etc.)?
  4. depvis.useModulePath
    • boolean, implicit este adevarat
    • doresc sa vizualizeze module dintr-o cale de modul
    • daca da, depvis.modulePath trebuie setat
  5. depvis.modulePath
    • Siruri de cale, separate prin separatorul de fisiere al sistemului)
    • setati o cale de modul local
    • exemplu: / jigsaw / exemplu / mlib
  6. depvis.showRequires
    • boolean, implicit este adevarat
    • vrei sa vizualizezi necesita / citeste relatiile?
  7. depvis.showRequiresMandated
    • boolean, implicit este adevarat
    • vrei sa vizualizezi necesita / citeste relatiile mandatate?
  8. depvis.showRequiresStatic
    • boolean, implicit este adevarat
    • vrei sa vizualizezi necesita / citeste relatii statice?
  9. depvis.showRequiresTransitive
    • boolean, implicit este adevarat
    • vrei sa vizualizezi necesita / citeste relatii tranzitive (1-tranzitive)?
  10. depvis.showExports, necesar doar pentru imprimanta
    • boolean, implicit este adevarat
    • vrei sa tiparesti exporturi?
  11. depvis.showExportsTo
    • boolean, implicit este adevarat
    • vrei sa vizualizezi relatiile de export catre?
  12. depvis.showOpens, necesar doar pentru imprimanta
    • boolean, implicit este adevarat
    • vrei sa tiparesti deschise?
  13. depvis.showOpensTo
    • boolean, implicit este adevarat
    • vrei sa vizualizezi relatiile deschise?
  14. depvis.showUses
    • boolean, implicit este adevarat
    • doriti sa imprimati utilizari?
  15. depvis.showProvided
    • boolean, implicit este adevarat
    • vrei sa tiparesti?
  16. depvis.showContains, este necesar doar pentru imprimanta
    • boolean, implicit este adevarat
    • doriti sa imprimati contine, adica toate pachetele ascunse?
  17. depvis.showMainClass
    • boolean, implicit este adevarat
    • vrei sa tiparesti clasa principala?
  18. depvis.prefixWithModuleName, necesar doar pentru imprimanta
    • boolean, implicit este adevarat
    • doriti sa prefixati fiecare linie de iesire cu numele si versiunea modulului (pentru grep-uri mai usoare)?
  19. depvis.outputFileName, necesar doar pentru Visualizer
    • Sir
    • numele fisierului pentru fisierul de iesire DOT
    • exemplu: /tmp/moduledependencies.dot
  20. depvis.showLegend, necesar doar pentru Visualizer
    • boolean, implicit este adevarat
    • doriti sa vizualizati o legenda plus titlu si marcaj de timp?
    • daca da, graficul va fi rasturnat la LR
  21. depvis.diagramTitle, necesar doar pentru Visualizer
    • Sir
    • configurati un titlu pentru diagrama

TODOs, LOP, Backlog, Idei, …

Niciun software nu este pregatit vreodata 😉 Asadar, iata cateva idei ramase (orice alt feedback foarte binevenit!):

  • Afisarea necesita dependente tranzitive cu un stil de linie diferit
  • Includeti n-tranzitivitate pentru necesita-tranzitiva (in prezent limitata la 1-tranzitivitate)
  • Permite filtrarea relatiilor individuale (lista alb-negru)
  • Includeti valoarea hash a unui modul
  • In prezent, DepVis afiseaza doar module din modulele observabile (= modul modul cale si sistem). Alternativ, permiteti afisarea modulelor dintr-o configuratie.
  • Permiteti configurarea culorilor, a stilurilor de margine, a stilurilor / formelor de nod etc. prin fisierul de configurare din exterior (in prezent, trebuie sa schimbati clasa Java depvis.GraphVizHelper.java si sa recompilati).
  • Adaugarea unei legende GraphViz pare posibila numai cu rankdir = LR. Aceste setari rastoarna apoi intregul grafic (deoarece nu se poate face doar intr-un subgraf). Orice modalitate de a ocoli acest lucru?
  • Scrieti numele (numele) pachetelor intr-o margine de exporturi
  • Aspect: Orice text adaugat ca eticheta la o margine trebuie vizualizat „indeaproape”

Ultimele modificari

Migrarea la Java 9.0.1 (lansare)

Nu sunt necesare modificari

Ultimele caracteristici, toate noi in 0.3

  • Includeti toate elementele statice (atat in ​​imprimanta, cat si in vizualizator – vizualizate ca in sagetile albastre punctate, realizate si in legenda)
  • Includeti toate deschiderile (numai in imprimanta, nu in vizualizator)
  • Includeti toate deschiderile (atat in ​​imprimanta, cat si in vizualizator – vizualizate ca in sagetile portocalii, realizate si in legenda)
  • Tipareste toate utilizarile si toate ofera (numai in imprimanta, nu in vizualizator)
  • Tipareste continutul, adica pachetele ascunse (numai in imprimanta, nu in vizualizator)
  • Tipareste clasa principala (numai in imprimanta, nu in vizualizator)
  • Imprimarea poate acum sa prefixeze fiecare linie de iesire cu numele modulului, consultati optiunea depvis.prefixWithModuleName
  • Modulele deschise sunt acum vizualizate ca octogone
  • Migrat la versiunea finala Java 9 (181), migrat la Eclipse 4.7.1a

Proiecte asociate

Exemple de puzzle, consultati https://github.com/accso/java9-jigsaw-examples: Java 9 Jigsaw modules suite suite

Multumiri

Thx catre echipa GraphViz (http://www.graphviz.org) pentru acest instrument magic!

Thx, de asemenea, lui Kohsuke Kawaguchi pentru graphviz-api la https://github.com/kohsuke/graphviz-api! Am furnizat API-ul sau la https://github.com/mrtnlhmnn/graphviz-api si am facut cateva modificari minore (in principal pentru a evita duplicatele nodurilor GraphViz pe baza ID-ului lor).

Licentiat sub licenta Apache, versiunea 2.0 („Licenta”); nu puteti utiliza acest fisier decat in ​​conformitate cu licenta.

Puteti obtine o copie a Licentei la adresa

http://www.apache.org/licenses/LICENSE-2.0

Cu exceptia cazului in care legislatia aplicabila o impune sau se aproba in scris, software-ul distribuit in baza Licentei este distribuit pe „CA ATARE”, FARA GARANTII SAU CONDITII DE ORICE TIP, fie expres, fie implicit. Consultati licenta pentru limbajul specific care reglementeaza permisiunile si limitarile din licenta.