Suche Lib für Visualisierung von Graphen

Bitte aktiviere JavaScript!
Ich suche für ein Projekt eine Bibliothek, um einen Dependency Graph darzustellen (ausgelesen aus dem pom.xml eines Maven-Projekts) und verschiedene Visualisierungen anhand von Messungen und Datenaufbereitungen einzublenden. Ich möchte mich nicht selbst mit Zooming, Layout usw. befassen sondern dies der Bibliothek überlassen können.
Ich stell mir einen Graphen vor, der alle Abhängigkeiten enthält und an der Seite eine Liste der Visualisierungen (z.B. #ausgehende Relationen, Liste von Sicherheitslücken, andere Metriken) von denen immer nur eine ausgewählt werden kann. Anschließend kann der Graph durch Zoomen usw. inspiziert werden.

Das einfachste Beispiel ist das Zählen von ausgehenden Relationen jeder Abhängigkeit. Hier möchte ich Abhängigkeiten mit vielen Relationen hervorheben.
Zudem möchte ich an den Nodes Tooltips einblenden und in dessen Text Links (wie <a>) zu anderen Abhängigkeiten erstellen können.
Bibliotheken, die ich bisher angeschaut habe (VisFX, GraphStream) unterstützen meist nur die Darstellung von Nodes und Edges. Verlinkungen, Tooltips, Zusatzinformationen sind in der API und im Datenmodell gar nicht vorgesehen. Außerdem sind die Freiheiten in der Darstellung meist eingeschränkt.

Am liebsten würde ich die JVM nicht verlassen und es mit JavaFX oder Swing umsetzen. Das hat den Vorteil, dass ich keine Client-Server Architektur samt Serialisierungen der anzuzeigenden Daten benötige. Ich fürchte jedoch, dass Javascript Bibliotheken flexibler sind.

Falls jemand schon einmal solch eine Visualisierung gesehen hat oder Erfahrung mit solchen Bibliotheken gemacht hat wäre ich dankbar für Vorschläge.
 
FXDiagram hatte ich mir schon angeschaut, aber leider kein einfaches Beispiel gefunden, wie ich es nun verwende. Auch hat mich Xtext, Xtend abgeschreckt. Das ganze Konzept dahinter ist mir nicht klar geworden. Videos und Slides waren leider nicht sehr informativ.

Graph-Editor scheint halt eher zur Entwicklung von Editoren zu sein. Aber vielleicht kann man dessen Flexibilität "missbrauchen".

Zest sieht vielversprechend aus - jedenfalls dieses Beispiel. Leider ist es eclipse-Ecosystem und da würde ich mich nur zu Not einarbeiten wollen.

Ich fürchte bei den Java-Bibliotheken auch immer, dass sie ein Feature in der Darstellung nicht unterstützen und ich dieses Feature dann nicht implementieren kann. Bei JS-Bibliotheken kann man immer noch über den DOM alles erreichen und modifizieren - bzw. sehr einfach.
Beispielsweise möchte ich auch durch Klick auf eine Node alle Kinder oder nur bestimmte Nodes hervorheben.
 
FXDiagram hatte ich mir schon angeschaut, aber leider kein einfaches Beispiel gefunden, wie ich es nun verwende. Auch hat mich Xtext, Xtend abgeschreckt. Das ganze Konzept dahinter ist mir nicht klar geworden. Videos und Slides waren leider nicht sehr informativ.

Graph-Editor scheint halt eher zur Entwicklung von Editoren zu sein. Aber vielleicht kann man dessen Flexibilität "missbrauchen".

Zest sieht vielversprechend aus - jedenfalls dieses Beispiel. Leider ist es eclipse-Ecosystem und da würde ich mich nur zu Not einarbeiten wollen.

Ich fürchte bei den Java-Bibliotheken auch immer, dass sie ein Feature in der Darstellung nicht unterstützen und ich dieses Feature dann nicht implementieren kann. Bei JS-Bibliotheken kann man immer noch über den DOM alles erreichen und modifizieren - bzw. sehr einfach.
Beispielsweise möchte ich auch durch Klick auf eine Node alle Kinder oder nur bestimmte Nodes hervorheben.
Ja das stimmt. Ich bin gerade noch beim FXDiagramm stöbern auf diese Bibliothek gestoßen, was meinst du dazu https://github.com/eternnoir/graphvizapi
 
Visual Library + JUNG sieht interessant aus. Das müsste ich einmal aufsetzen und die API erkunden, ob damit alles möglich ist.

GraphViz ist halt eher für Bilder. Da ich umfangreiche Graphen erwarte muss man Zoomen und Erforschen können.
 
Im Repo von Visual Library + JUNG gibt es auch einen Ordner für die Visualisierung eines Dependency Graphen - also quasi das was ich auch machen möchte. Leider enthält es Abhängigkeiten zu org.netbeans.external, die nicht mehr aufgelöst werden können und es handelt sich um eine Netbeans-Integration. Ich denke, dass ich mit der vl-jung-demo gut starten kann. Ich muss nur den Code erstmal aufräumen, und unnötiges rausschmeißen und dann evaluieren, ob die Funktionalitäten so abdeckbar sind. Aber auf den ersten Blick sieht es sehr gut aus.
 
Leider enthält es Abhängigkeiten zu org.netbeans.external, die nicht mehr aufgelöst werden können und es handelt sich um eine Netbeans-Integration.
Es kann sein, dass das einfach Netbeans Module als Wrapper für die betreffenden Jars sind (um ein Jar als Modul für das NetBeans Modulsystem zur Verfügung zu stellen).
 
Noch ein paar Notizen, den Code für Netbeans Integration zum Laufen zu bekommen:
Leider kann der Code nicht kompiliert werden, aufgrund der Abhängigkeiten. Ich denke diese Abhängigkeiten wurden mal durch das Repo http://bits.netbeans.org/maven2/ bereitgestellt.
Es geht um die folgenden Abhängigkeiten:
Code:
<dependency>
            <groupId>org.netbeans.external</groupId>
            <artifactId>maven-dependency-tree-2.0</artifactId>
            <version>2.34</version>
            <type>jar</type>
        </dependency>
        <dependency>
            <groupId>org.netbeans.external</groupId>
            <artifactId>maven-artifact-3.0.4</artifactId>
            <version>2.34</version>
            <type>jar</type>
        </dependency>
        <dependency>
            <groupId>org.netbeans.external</groupId>
            <artifactId>maven-core-3.0.4</artifactId>
            <version>2.34</version>
            <type>jar</type>
        </dependency>
Ich habe diese auf gut Glück durch Abhängigkeiten ersetzt, die ähnlich heißen, vermutlich das gleiche beeinhalten und auflösbar sind. Offensichtlich ein Akt der Verzweiflung, denn die Version RELEASE110 passt vermutlich nicht zu RELEASE731, auf dem der Rest der Abhängigkeiten basiert.
Code:
       <dependency>
            <groupId>org.netbeans.external</groupId>
            <artifactId>maven-dependency-tree-2.0</artifactId>
            <version>RELEASE110</version>
            <type>jar</type>
        </dependency>
        <dependency>
            <groupId>org.apache.maven</groupId>
            <artifactId>maven-artifact</artifactId>
            <version>3.0.4</version>
            <type>jar</type>
        </dependency>
        <dependency>
            <groupId>org.apache.maven</groupId>
            <artifactId>maven-core</artifactId>
            <version>3.0.4</version>
            <type>jar</type>
        </dependency>
und dem Repo
Code:
<repository>
    <id>netbeans-patched-module-repository</id>
    <url>https://raw.github.com/jeddict/netbeans-module-repository/master</url>
</repository>
umgebaut, sodass der Code kompiliert. Nachdem ich die Integration baue und in Netbeans lade wird nun auch ein Button "JUNG Graph" in der Detailansicht einer Abhängigkeit angezeigt. Wenn ich die View jedoch öffne bekomme ich eine Exception:
Code:
lava.lang.ClassNotFoundException: org.netbeans.modules.xml.xam.dom.AbstractDocumentModel
    at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at org.netbeans.ProxyClassLoader.loadClass(ProxyClassLoader.java:222)
Caused: java.lang.ClassNotFoundException: org.netbeans.modules.xml.xam.dom.AbstractDocumentModel starting from ModuleCL@3452b95f[com.timboudreau.maven.dependency.graph.fork] with possible defining loaders [ModuleCL@491dc621[org.netbeans.modules.xml.xam]] and declared parents
Außerdem benutzt der Code die maven API mit DependencyNode#getState, (um die Dependencies nach Konflikten, eingebunden, weggelassen zur Zyklusvermeidung usw. zu kategorisieren), welches mit Maven3 nicht kompatibel ist. Solch eine Einteilung ist mit der Maven3 API nicht mehr möglich, sodass ich den ganzen Code eh umschreiben müsste. https://stackoverflow.com/a/1492023/772883
Ich hatte nur gehofft dieses Beispiel zum Laufen zu bekommen, um den Code besser verstehen zu können. Vielleicht muss man auch ein SDK installieren oder diese external JARs ins lokale Maven Repo installieren. Leider habe ich dazu noch nichts gefunden. Falls noch jemand eine Idee dazu hat..
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben