Abhängigkeitsbaum unter Maven anzeigen

Nutzt man Maven in einem Projekt, so wird dieses Projekt eine Reihe von Abhängigkeiten in Form von Bibliotheken haben. Manchmal kommt es vor, das eine Bibliothek in mehreren Versionen von unterschiedlichen Bibliotheken eingebunden wird und das dass Hauptprojekt die falsche Version nutzt. Im Terminal kann man mittels des Befehls:

mvn dependency:tree

den Abhängigkeitsbaum des Projektes anzeigen lassen. Bei kleinere Projekten sieht der Baum dabei noch übersichtlich aus:

[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ netty-example ---
[INFO] de.uulm.vs:netty-example:jar:1.0-SNAPSHOT
[INFO] +- junit:junit:jar:3.8.1:test
[INFO] \- org.jboss.netty:netty:jar:3.2.2.Final:compile

Bei größeren Projekten kann man mit Hilfe des Abhängigkeitsbaum ermitteln, welche Abhängigkeiten woher kommen und eventuelle Probleme mit diesen lösen.

JSON mit GSON schreiben

Wenn man unter Java eine JSON-Datei schreiben möchte, so kann man dies natürlich von Hand tun. Einfacher und effizienter ist es allerdings wenn man das ganze mit der Bibliothek GSON erledigt. Dabei handelt sich um eine von Google entwickelte Bibliothek, welche ursprünglich für den internen Gebrauch bei Google gedacht war. Mit dieser ist neben vielen anderen Dingen unter anderem auch die Serialisierung von Java-Objekten in JSON möglich. Möchte man eine JSON-Datei manuell schreiben so nutzt man den von der Bibliothek bereitgestellten JsonWriter:

JsonWriter writer = new JsonWriter(new OutputStreamWriter(new FileOutputStream(new File("test.json")), StandardCharsets.UTF_8));

writer.setIndent("  "); // definiert die Einrückung

writer.beginObject();
writer.name("test");
writer.value("123");
writer.endObject();

writer.close();

Im ersten Beispiel wird ein einfaches Objekt in eine JSON-Datei geschrieben, was in der Datei schlussendlich so aussieht:

{
  "test": "123"
}

Natürlich ist es auch möglich beliebig viele Objekte in eine Datei zu schreiben und Arrays zu nutzen:

JsonWriter writer = new JsonWriter(new OutputStreamWriter(new FileOutputStream(new File("C:\\Temp\\test.json")), StandardCharsets.UTF_8));

writer.setIndent("  "); // definiert die Einrückung

writer.beginObject();
writer.name("persons");

writer.beginArray();

writer.beginObject();
writer.name("firstname");
writer.value("Hans");
writer.name("lastname");
writer.value("Meiser");
writer.endObject();

writer.beginObject();
writer.name("firstname");
writer.value("Luna");
writer.name("lastname");
writer.value("Bottom");
writer.endObject();

writer.endArray();

writer.endObject();

writer.close();

Heraus kommt dabei eine JSON Datei welche so aussieht:

{
  "persons": [
    {
      "firstname": "Hans",
      "lastname": "Meiser"
    },
    {
      "firstname": "Luna",
      "lastname": "Bottom"
    }
  ]
}

Zu finden ist die Bibliothek auf GitHub. Lizenziert ist die GSON-Bibliothek unter der Apache Lizenz und damit freie Software.

Online-JSON-Validator

Wenn man JSON-Dateien erzeugt, kann es passieren das man bei der Erzeugung Fehler erzeugt. Zur Überprüfung solcher JSON-Daten kann man einen Validator nutzen, wie ihn jsonlint.com zur Verfügung stellt. Dort wird der JSON-Quelltext eingefügt und kann anschließend problemlos validiert werden. Bei Fehlern in der JSON-Datei, wird angezeigt wo diese entstehen und können damit beseitigt werden.

jsonlint.com

jsonlint.com

Der Quelltext von JSONLint kann auf GitHub bezogen werden. Er ist dabei unter der MIT-Lizenz lizenziert und damit freie Software.

Konnektivität nach der Installation von CentOS 7 herstellen

Wenn man ein CentOS 7 in der Minimal-Installation installiert (und dabei nicht aufpasst), wird man nach der Installation feststellen das man über keine Konnektivität verfügt. Das ist bedingt dadurch das die entsprechende Netzwerkschnittstelle beim Booten nicht konfiguriert wird. Um die Schnittstelle zu konfigurieren, sollte im ersten Schritt in den entsprechenden Ordner gewechselt werden:

cd /etc/sysconfig/network-scripts/

In diesem Ordner befindet sich eine Datei ifcfg-eth0 (alternativ sind auch andere Schnittstellennamen wie ifcfg-enp0s3, em1 und ähnliche möglich). Die entsprechende Datei wird nun mittels vi geöffnet:

vi ifcfg-eth0

In dieser Datei gibt es eine Option mit dem Namen ONBOOT, deren Wert standardmäßig auf no gestellt ist. Dieser Wert muss in yes geändert werden und anschließend die Datei gespeichert werden (:w zum Speichern der Datei, :q um VIM zu schließen). Nach einem anschließenden Neustart, sollte die Netzwerkschnittstelle konfiguriert und funktionsfähig sein.

Heap Dumps unter Java auswerten

Manchmal kommt es vor das man eine Java Applikation geschrieben hat, welche aus irgendeinem Grund mehr Speicher verbraucht als sie sollte. Im schlimmsten Fall führt dies zu einem OutOfMemory-Error. Möchte man dem Übeltäter auf die Spur kommen, kann man im ersten Schritt einen Heap Dump bei einem OutOfMemory-Error vornehmen. Dazu fügt man den VM Optionen der JVM den Parameter:

-XX:+HeapDumpOnOutOfMemoryError

hinzu. Dieser Parameter sorgt dafür, das im Falle eines OutOfMemory-Error, ein Dump des Heaps auf der Festplatte landet. Das Problem an diesem Dump ist allerdings, das er sich händisch schlecht auswerten lässt. Abhilfe schafft hier das freie Werkzeug Eclipse Memory Analyser.

Eclipse Memory Analyser

Eclipse Memory Analyser

Mit diesem ist es möglich den Heap Dump einzulesen und anschließend unter Zuhilfenahme der Analysefunktion dem Memory Leak auf die die Spur zu kommen. Bezogen werden kann das Tool über die offizielle Webseite. Lizenziert ist der Memory Analyser unter der Eclipse Public License und damit freie Software.