Montag, 29. März 2010

Smart Maven Configuration Project

Ich habe ein neues Projekt (Smart Maven Configuration Project SMCP) gestartet, dass die leidige Konfigurationsarbeit in Maven Projekten deutlich reduzieren soll. Im Gegensatz zu Eclipse Plugin M2Eclipse soll in dieses Projekt durch Intelligenz vor allem in der Anfangsphase eines neuen Projektes Maven-Anfängern und Fortgeschrittenen die leider notwendigen Maven Konfigurationen automatisch und intelligent zu erledigen. Dies spart den Entwicklern Zeit, Frust und Recherchearbeit bzgl. der Maven Konfiguration. Dadurch sind sie in der Lage ihrer eigentlichen Entwicklungsarbeit nachzukommen. Idee und Entwickler und Tester sind willkommen.

Sonntag, 28. März 2010

M2Eclipse Version 0.10.0

Eine neue Version des beliebten Eclipse-Maven-Plugins m2eclipse ist erschienen. Für alle Eclipse Benutzer die eine vorhergehende Version von m2eclipse einsetzen, müssen sie als erstes das alte Plugin deinstallieren und anschliessend die neuen Version installieren. Die Aktualisierung per Updatesite URL funktioniert nicht. Das liegt daran, das es mit der Version 0.10.0 zwei neue Updatesite URLs vorhanden sind. Das Plugin besteht jetzt aus zwei Teilen dem Core-Plugin und den Extras. Um alle Extras installieren zu können sollte vor der Installation von M2Eclipse Subclipse installiert werden.
http://m2eclipse.sonatype.org/sites/m2e-extras

Und natürlich sollte man auch gleich den Proxy-Eintrag für Maven konfigurieren: http://maven.apache.org/guides/mini/guide-proxies.html

Montag, 22. März 2010

Mittwoch, 17. März 2010

Maven Dependency Hell Teil 2

Folgender Fall, ich benötige a.jar die ist abhängig von b.jar. Aber b.jar ist wieder abhängig von c.jar. Dies führt oft dazu, dass ein Maven Projekt viele JARs benötigt, die es in der Realität nicht braucht, denn es ist nicht notwendiger Weise so, dass a.jar auch c.jar braucht. Dafür bietet Maven eine passende Konfigurationsmöglichkeit. Hier dies mal konkret für das Problem der Bibliothek jide-oss und dem Archiv aqua.jar. Noch ein Tipp, schaut euch mal im Eclipce Depedency View an welche Archive Log4J im Schlepptau hat.

<dependency>
<groupId>com.jidesoft<groupId>
<artifactId>jide-oss<artifactId>
<version>2.8.4<version>
<exclusions>
<exclusion>
<artifactId>aqua<artifactId>
<groupId>aqua<groupId>
 </exclusion>
 </exclusions>
</dependency>

Hier stellt sich wieder die Frage, ob convention over configuration wirklich funktioniert oder ob das Problem in der Maven-Interpretation dieser Idee liegt.

Montag, 15. März 2010

Maven Dependency Hell

Einer der Vorzüge Mavens ist das einfache Dependency-Management, also der Umgang mit fremden JARs. Diese Einfachheit kann auch mal zu Umwegen führen, wie bei diesem Beispiel: Baralga benötigt jide-oss eine Bibliothek die das Erstellen von Swing-GUIs erleichtert. Diese Bibliothek nutzt OS-spezifische Bibliotheken auf dem Mac z.B. die Datei aqua.jar. Mit Mac OS X 10.6 (Snow Leopard) gibt es diese Datei nicht mehr, Apple hat die Packages umbenannt und auch die JAR (siehe hier). Baralga ist auf dem Mac weiterhin lauffähig. Aber man kann es leider nicht mehr kompilieren, weil Maven diese Abhängigkeit nicht auflösen kann. Ein Workaround besteht darin, die jidee-oss.2.8.4.jar herunter zu laden und als System-Jar zu deklarieren und den Pfad zu ihr anzugeben. Noch ein Tipp, Maven akzeptiert hier nur absolute Pfade.

<dependency>
<groupId>com.jidesoft</groupId>
<artifactId>jide-oss</artifactId>
<version>2.8.4</version>
<scope>system</scope>
<systemPath>/Users/ebert/Downloads/jide-oss-2.8.4.jar</systemPath>
</dependency>

Dienstag, 9. März 2010

Free Projekthosting Origo

Es gibt eine Reihe von Anbietern zum hosten von eigenen Projekten. Der bekannteste ist Sourceforge. Bei Sourceforge wie bei ähnlichen Hostern z.B. Berlios kann man nur Open Source Projekte hosten, die auch entsprechende Lizenznen z.B. die infektiöse GPL haben. Natürlich sind auch andere Lizenzen OSS-Lizenzen wie die APL möglich. Eine Übersicht der relevanten OSS-Lizenzen ist auf Wikipedia zu finden (Link).
Es ist schwierig für Closed Source einen Hoster zu finden. Ein weniger bekannter Hoster der auch Closed Source Projekte akzeptiert ist Origo. Natürlich hat man auch die Möglichkeit eigene Softwareinstallationen einzusetzen z.B. bietet sich da TRAC an.

Update:
Leider scheitere ich an der Issue-Tracker-Integration von Origo in Eclipse. Der entsprechende Connector liefert leider einen Fehler.

Montag, 8. März 2010

Hilfreiche Links zur Integration von Java Anwendungen in Mac OS X

Eine kleine Liste mit Links die helfen Java-Applikationen Mac-like zu machen.

Integration von Java Anwendungen in Mac OS X

Java Anwendungen laufen auf fast jeder Plattform, der Mac ist hier keine Ausnahme. Aber der Mac ist nicht nur was besonderes sondern er ist auch ein bisschen anders. Eine normale, unangepasste Java Anwendung sieht wie folgt aus:
Baralga Zeiterfassung auf dem Mac
Was dem Mac-User auffällt ist, dass das Menü im Fenster und nicht wie Mac-üblich in der Menüleiste untergebracht ist. Um dies zu ändern muss ein Property-Wert gesetzt werden, dies kann in der Kommandozeile beim Aufruf des Programm passieren oder im Code. 
   java -Dapple.laf.useScreenMenuBar=true -jar baralga-core-1.4.4-SNAPSHOT.jar
Alternativ kann man in der Klasse die die Main-Methode enthält folgende Zeile einfügen:
static {
   System.setProperty("apple.laf.useScreenMenuBar", "true");
}
Dieser Code wird beim Erzeugen eines Objektes dieser Klasse ausgeführt und der Property-Wert gesetzt.  Das Ergebnis sieht dann wie folgt aus:

Noch besser wird es wenn man folgendes Argument mit übergibt:
   -Xdock:name="Alif" 
Es wird damit der Name der Applikation gesetzt. Dies führt dazu, dass nicht die Javaklasse in der Menüleiste auftaucht sondern der Applikationsname. Dies gilt auch für Dock. Wenn man einen Mac zur Verfügung hat kann man es sich einfacher machen, in dem man den Jar Bundler benutzt. Dieser ist ein Werkzeug, dass mit Apples Xcode installiert wird. Leider ist es nicht separat zu finden. Mit Hilfe des Jar Bundlers lassen sich aus Java-Applikationen einfach Doppel-Klick-bare Anwendungen bauen. Naürlich kann sind auch richtig gebaute JARs Doppel-Klick-bare Anwendungen,  mit Hilfe  des Jar Bundlers kann man alle Mac OS X spezifischen Einstellungen vornehmen. Für den Fall das, die Java-Anwendung kein sogenanntes Big-JAR ist, kann man die benötigeten JARs auch mit Hilfe des Jar Bundlers hinzufügen. Leider fügt der Jar Bundler nur absolute Pfade in die entsprechende Datei (Info.plist) ein. Man kann jetzt die abhängigen Bibliotheken mit in Paket kopieren z.B. unter Contents/Resoures/Java/lib. DAnach muss man nur noch die Pfade in der Datei Info.plist korrigieren und die absoluten Pfade ersetzen. Dazu kann man z.B. JEdit benutzen:
   $JAVAROOT/lib/commons-lang-2.4.jar
Die Variable JAVAROOT gibt den vollständigen Pfad zum Verzeichnis an, in dem die eigentliche JAR meines Programms liegt, also /Application/Baralga/Baralga/Contents/Resource/Java.