File | Date | Author | Commit |
---|---|---|---|
dist | 2023-04-10 |
![]() |
[4e95cc] commit of version 2.1.0 |
screenshots | 2020-03-03 |
![]() |
[1d97f3] added screenshots |
src | 2023-04-11 |
![]() |
[0e3552] javadoc and tests for permitted subclasses |
testmodule | 2023-04-10 |
![]() |
[4315e0] handling of class file format 64 (Java 20) : mo... |
CHANGELOG.txt | 2023-04-11 |
![]() |
[0e3552] javadoc and tests for permitted subclasses |
LICENSE-2.0.txt | 2015-12-13 |
![]() |
[57a642] commit of version 1.0 |
README.md | 2023-04-10 |
![]() |
[4e95cc] commit of version 2.1.0 |
Jadecy stands for Java Dependencies and Cycles computer.
Jadecy provides treatments to compute dependencies, strongly connected
components (SCCs), and cycles, in classes or packages dependencies graphs parsed
from class files, either through API or through command line.
Lower level treatments, such as graph related computations, are also publicly
available.
It's an evolution of http://sourceforge.net/projects/jcycles.
Apache License V2.0
Java 5+, except net.jadecy.comp.JavacHelper which uses JavaCompiler
and thus requires Java 6+
src/test:
Jadecy: The entry point.
JadecyUtils: Utilities for dealing with Jadecy, in particular its results.
DepUnit: For cycles and dependencies unit tests.
JadecyMain: Allows for a simple usage of Jadecy from command line,
or from code with either main(...) or runArgs(...) methods.
Handles class files of major version <= 64 (Java 20), and does best effort
if major version is higher.
Cannot parse .jimage files, which would require dependency to jrt-fs.jar,
which itself requires Java 8, and is not trivial to use
(FileSystemNotFoundException is easy to get), but their content can easily
be extracted into class files using jimage executable.
Uses Tarjan's algorithm for SCCs computation, and Johnson's algorithm
for cycles computation, with continuations instead of recursion,
which allows to handle large graphs (< 2^31 vertices).
To avoid spam due to dependencies within a same top level class and its
recursively nested classes, cycles and SCCs only involving such classes
are always ignored by Jadecy class treatments.
Lower level APIs such as for class files parsing, classes and packages trees
and graphs manipulation, or graph related computations, are also publicly
available (cf. overview below), and can easily be extracted (sources contain
no cyclic dependencies, except deliberate ones in tests).
As a general rule, for convenience, these treatments ensure determinism
and when possible some ordering in their result.
Sample Jadecy class usage can be found in src/samples/java,
and more use cases in tests.
Sample command line usages with .bat files (based on that, UX or MAC users
should easily be able to do their own scripts) can be found in
src/samples/scripts, and more use cases in tests.
Javadoc: Code Javadoc is done in plain text, not using HTML, for simplicity
and easier writing and reading when working with source code.
DepUnit: To check dependencies and cycles in unit tests.
net.jadecy.cmd: Contains classes for Jadecy usage through command line.
Principal classes:
JadecyMain: Allows for a simple usage of Jadecy from command line,
or from code with either main(...) or runArgs(...) methods.
net.jadecy.code: Contains classes for modeling classes and packages trees
and dependencies, and related utilities.
Principal classes:
PackageData: Represents a package.
net.jadecy.comp: Contains classes to make it easy to compile Java code
programmatically, so as to be able to use Jadecy or DepUnit on the
resulting class files, or to build this library.
net.jadecy.graph: Contains classes for graphs representations and
computations.
Principal classes:
SomeCyclesComputer: Computes some cycles (if any, finds at least one).
net.jadecy.names: Contains classes for dealing with packages or classes
names.
Principal classes:
NameUtils: Utilities for packages or classes names.
net.jadecy.parsing: Classes for parsing classes and packages dependencies
from file system or memory.
Principal classes:
Comparison done in 2015, so with an early version of jdeps.