Integration clientseitiger Bibliotheken mittles WebJars – Web Libraries in Jars

Die Nutzung von WebJars – Web Libraries in Jars ist eine clevere Methode um clientseitige Bibliotheken als Abhängigkeit in javabasierte Anwendungen einzubinden. Auf der Platform webjars.org, die seit Oktober 2012 online ist, werden vorhandene Webjars veröffentlicht und alle dort gehosteten Jars sind auch im Maven Central Repository verfügbar.

Aufbau

Bei einem Webjar handelt sich um ein Maven Artifakt bestehend aus nur einer pom.xml Datei. Als kompiliertes Jar stellt es die clientseitig notwendigen Ressourcen über das META-INF Verzeichnis zur Verfügung. Dabei wird die Servlet 3.0 Spec genutzt, in der unter anderem definiert ist, dass alles was unterhalb des META-INF/resource Verzeichnis als statische Resourcen verfügbar ist.

|-pom.xml
|-README.md
|-target
|---classes
|-----META-INF
|-------resources
|---------webjars
|-----------jvectormap
|-------------2.0.1
|---------------jquery-jvectormap.css
|---------------jquery.jvectormap.min.js
|---------------jvectormap.jquery.json
|---------------LICENSE-COMMERCIAL
|---------------LICENSE-GPL
|---------------README.md

“Build your own Webjar” – Beispiel jVectorMap

Gibt es noch kein Webjar für die benötigte JavaScript Bibliothek, kann in wenigen Schritten ein eigenes WebJar erstellt werden. Das Grundgerüst der pom.xml erstellen wir anhand der Anleitung Webjars – Contributing. Danach fügen wir in den Buildprozess die eigentlich Ausführungsschritte ein, um die nötigen Resourcen in den Ziel Ordner zubekommen.

Im Buildprozess kommen in unserem Fall die Maven Plugins wagon-maven-plugin , maven-antrun-plugin und yuicompressor-maven-plugin bei den folgenden Schritten zum Einsatz.

  • Herunterladen der ZIP Datei ( wagon-maven-plugin )
  • Entpacken der Zip Datei (maven-antrun-plugin)
  • Kopieren der CSS Resourcen und Lizenz Dateien (maven-antrun-plugin)
  • Zusammenfügen der JavaScript Dateien (yuicompressor-maven-plugin)

Die komplette pom.xml Datei ist auf GitHub verfügbar.

Beispiel Integration Spring MVC

Hinzufügen der Maven Dependency

<dependency>
	<groupId>org.webjars</groupId>
	<artifactId>jvectormap</artifactId>
	<version>2.0.1</version>
</dependency>

Einbindung in das Template

<script type='text/javascript' src='${pageContext.request.contextPath}/webjars/jvectormap/2.0.1/jquery.jvectormap.min.js'></script>

Wird zum Beispiel Spring MVC mit Spring Security eingesetzt, dann muss der Pfad zu den Resourcen verfügbar gemacht werden. Zum Beispiel über die WebMvcSecurityConfiguration

@Override
public void configure(WebSecurity web) throws Exception {
    web.ignoring().antMatchers("/webjars/**");
}

Die Entscheidung, ob der komplette Webjar Context Pfad oder nur einzelne Webjar freischaltet werden sollen liegt beim Entwickler.

Fazit

Mittels Webjars lassen sich clientbasierte Bibliotheken genauso einfach als Dependency einbinden und verwalten wie geläufige Java Artifakte.

Wird ein neues Webjar erstellt, bieten sich zwei Möglichkeiten der Verteilung an. Die Beste ist, es an die Community weiterzureichen (Webjars – Contributing, GitHub Webjars).

Ist das nicht möglich kann man es natürlich auch intern über den eigenen Repository Manager (Nexus o.ä.) anderen Entwicklern oder dem Continuous Integration & Build Server (Bamboo, Jenkins o.ä.) zur Verfügung zu stellen.

Atlassian User Group am 26.2.2015

Am 26.2.2015 finden die Atlassian User Group München in den Räumen Stylight statt. Wie immer haben die Organisatoren, die auch von der Scandio unterstützt werden, ein tolles Programm zusammengestellt. Auch wir sind mit zwei Vorträgen beteiligt. Dabei wird auch ein neues Plugin im Marketplace vorgestellt. Mehr über die Veranstaltung kann man auf www.aug-muc.de erfahren. Derzeit sind noch einige Plätze frei.

Java SE 6 Runtime Meldung unter Mac OS X Yosemite

“To open XYZ you need to install the legacy Java SE 6 runtime.”

Diese Meldung kommt so gut wie immer, wenn ich ein Java-basiertes Programm auf dem Mac öffnen möchte.
Screenshot 2015-02-11 09.00.47

Hintergrund ist, dass Apple mit dem Update auf OS X Yosemite 10.10.2 (14C109) alle Java Version kleiner als Java 8 deaktiviert hat. Warum das nicht an die Hersteller kommunziert wurde und diese immer noch in den Mac Packages das JRE 1.6 eintragen erschließt sich mir nicht. Auf der Oracle Seite Information and system requirements for installing and using Oracle Java on Mac OS X findet sich dazu nur ein kurzer Hinweis

Oracle’s Java version 7u25 and below have been disabled by Apple on OS X. Updating to the latest release will allow Java to be run on Mac OS X.

Leider bringt einen die Installation von Java 8 alleine nicht ans Ziel, sondern es muss noch der Startparameter des Programms oder die JRE Version geändert werden.

Dazu im Finder mittels Rechtsklick auf die Applikation das Context Menü öffnen und Show Package Contents auswählen. Als nächstes öffnet Ihr die Datei Info.plist im Editor Eurer Wahl und sucht die Stelle an der das JRE oder der Pfad zur JavaVM angegeben ist.

YgCQ4flDj5

Nun passt Ihr das JRE an Eure Java Version an und speichert die Datei. Eure Version erfahrt Ihr über folgendes Kommando im Terminal.

java -version

Das Verzeichnis der aktuell installierten Java VM(s) befindet sich hier

/System/Library/Frameworks/JavaVM.framework/Versions"

Auszug aus der Info.plist Datei bei Jasper Reports Studio
Vorher

  <key>Eclipse</key>
    <array>
      <!-- to use a specific Java version (instead of the platform's default) uncomment one of the following options:
        <string>-vm</string><string>/System/Library/Frameworks/JavaVM.framework/Versions/1.4.2/Commands/java</string>
        <string>-vm</string><string>/System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Commands/java</string>
      -->

Nachher

  <key>Eclipse</key>
    <array>
      <string>-vm</string><string>/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java</string>

Bei yED ist zum Beispiel nur die Versionnummer in der Info.plist Datei angegeben. Hier müsste als nur die Versionsnummer ausgetauscht werden und ob das JRE oder das JDK installiert ist.

<key>JVMRuntime</key>
<string>1.8.0_25.jdk</string>

Kurztipp: Zweiter HipChat Client

Kopieren der HipChat App und ändern des Identifiers

$ cp -a /Applications/HipChat.app/ /Applications/HipChat2.app
$ sed -i.bak 's/com.hipchat.HipChat/com.hipchat.HipChat2/' /Applications/HipChat2.app/Contents/Info.plist

Hipchat 2 starten, möglicherweise kommen nun etliche Key Access Meldungen, die stellen wir im nächsten Schritt ab.

$ open /Applications/HipChat2.app

Zum Abstellen der immer wiederkehrenden Key Access Meldungen Keychain Access öffnen, nach Hockey suchen und alle gefundenen Einträge öffnen und im Access Control Reiter Allow all applications wählen & speichern

$ open /Applications/Utilities/Keychain\ Access.app

Wer das ohne Terminal im Finder und Texteditor machen möchte findet hier eine passende Anleitung
Run Multiple HipChat Apps

Getestet ist das unter (Mac Yosemite 10.10.2). Geht das auch unter Windows oder Linux?

Vagrant PHP Development Box in einer Datei

Vagrant wird in der Scandio massiv für Entwicklungsumgebungen eingesetzt. Viele unserer Entwicklungssysteme basieren auf Vagrant, Virtual Box und Linux. Auch in unseren PHP Team gibt es für jeden Kunden spezifische Development Boxen in verschiedenen Komplexitätsstufen. Bei großen Projekten lohnt es sich die Vagrant Box vollständig neu aufzubauen und sich möglichst nah am Produktivsystem zu orientieren. Oftmals bietet es sich an Basis-Konfigurationen als Grundlage zu nehmen. Gerade im LAMP Bereich gibt es einige gute Vagrant Stacks, wie zum Beispiel r8/vagrant-lamp oder Scotch Box. Als Minimalist habe ich mich gefragt, geht das auch einfacher? Und ich machte mich daran gemacht eine Vagrant Konfiguration zu erstellen, die nur aus einer Datei, nämlich dem Vagrantfile besteht. Weiterlesen ›