Mac OS X Remote Install via Disc Target Mode

Problem: Leider ist das Superdrive von meinem MacBook Pro scheinbar schon etwas mitgenommen.. denn die Leopard-CD (normal, kein OEM) wollte er nicht mehr lesen – der iMac aber schon. 😐 DafĂŒr aber die mitgelieferte DVD, nur war das noch Tiger (10.4). Was tun?

Die Problemlösung ist die gleiche, wenn man ein ganz kaputtes Superdrive hat.

Idee 1: Remote Install oder in deutsch: Entfernte Installation

Dieses Feature wurde mit der EinfĂŒhrung des Macbook Airs in Leopard integriert – okay, fein, den Host könnte der iMac spielen. Leider scheint das entweder nicht funktionieren oder aber es funktioniert tatsĂ€chlich nur mit dem Macbook Air 🙁 Geht nicht. Schade

Idee 2: Die Leopard-DVD vom iMac

Ja, geniale Idee.. nur (leider) sind die mitgelieferten DVDs allesamt OEM-Versionen, die jeweils nur fĂŒr die Produktreihe funktionieren. Also mit anderen Worten: Einen anderen iMac kann ich Leopard installieren, fĂŒr ein anderes Macbook hĂ€tt ich ein(en) Tiger im Angebot.. ach menno 🙁

Idee 2.5: Disc Target Mode

Nachdem die Installation der iMac-Leopard-DVD auf dem Macbook Pro die Installation verweigerte, kam mir eine Blitzidee: Targetmode. Damit startet man das Target (also das Macbook) in einen besonderen Bootstatus; zeitgleich verbindet man den Target mit dem Hostrechner (Mac) und kann von dort auf die Platten zugreifen (vgl. externe Platten). Da man bei einem Mac auf externe Platten wie die eigene zugreifen kann, kann man auch installieren. Und wenn man fĂŒr den Host auch eine gĂŒltige Installations-CD hat (oder ein funktionierendes Laufwerk)… *freu*

Tatsache, man nehme also die Boot-DVD des Hosts (hier iMac), mit der man „booten & installieren darf“. Als Zielmedium wĂ€hlt man aber die Platte aus, die auf dem Target liegt – sehr einfach an dem Symbol eines externen DatentrĂ€gers zu erkennen. Nicht vergessen, vor dem nĂ€chsten Neustart die Rechner alle auszumachen, Kabel raus.. neu starten.. und voila. 🙂

Mac OS X: Non-Java exception raised.

Böses Erwachen nach einem Reboot: Auf einmal funktionierte Swing nicht mehr richtig, Components mit eigener paint()-Methode funktionierten gar nicht oder verursachten die abenteuerlichsten Zeichnungen. SchĂ€tzungsweise nach dem Installieren des Developerpacks habe ich irgendwann letzte Woche (> 9 Tage) nicht den Mac nicht neu gestartet.. dann wĂ€re mir das frĂŒher aufgefallen.

Der genaue Wortlaut der Meldung: exception: java.lang.RuntimeException: Non-Java exception raised, not handled! (Original problem: Error (10000) creating CGSWindow)

Nach ein bisschen Recherche mit dieser Meldung stieß ich dann auf diesen Thread, in welchem auch die Lösung parat steht: Zugriffsrechte reparieren lassen und rebooten. Warum man rebooten muss (man muss es, habe es ausprobiert), entzieht sich meiner Kenntnisse; vielleicht werden manche Ressourcen nur einmal geöffnet?

Java-Applikation als Mac-Anwendung deployen (Ant)

Wie bereits berichtet, ist es von Vorteil, der Buildprozess mit einem Ant-Script zu automatisieren. Um eine Mac-Application zu erstellen, muss man nur wissen, wie eine solche Application aufgebaut ist.. der Rest ist ein Klacks.

Eine Mac-Application ist ein Verzeichnis mit der Erweiterung .app. Die Struktur einer Application (wir nennen sie im Folgenden Application) sieht wie folgt aus:

  • Application.app
    • Contents
      • Info.plist — Properties-Datei fĂŒr die Anwendung und Java
      • MacOS — Verzeichnis
        • JavaApplicationStub — Bootloader fĂŒr Javaprogramme
      • PkgInfo — Datei mit Entwicklerinfo
      • Resources — Verzeichnis mit dem eigentlichen Javaprogramm
        • Java
          • Die Jars und so.

Den Bootloader befindet sich auf einem Mac in dem Ordner /System/Library/Frameworks/JavaVM.framework/Resources/MacOS/JavaApplicationStub.

Prinzipiell kann man sich diese Struktur komplett selber erstellen; es ist aber zu Empfehlen, den initialen Prozess durch das Programm /Developer/Applications/Utilities/Jar Bundler zu machen. Mit Hilfe dieses Programmes lĂ€sst sich fĂŒr eine bereits fertige JAR die Application erstellen.

Anschließend kopiert man das erstellte Resultat – quasi als Vorlage – in ein Verzeichnis fĂŒr die Builds. In meinem Fall in dem build_data Verzeichnis. Ein Ant-Task erstellt darauf hin im Verzeichnis deploy eine Application. Die Vorlage ist idealerweise auch im SVN und auch spĂ€ter noch verĂ€nderbar – beispielsweise durch das Ändern des Applicationicon, -titel oder anderen Einstellungen.

Wichtig 1: Bei Verwendung von FatJar muss man als Package fĂŒr die Main den Bootloader von FatJar (com.simontuffs.onejar.Boot)Â verwenden. Dies erkennt das Programm Jar Bundler aber auch automatisch.

Wichtig 2: Beim Kopieren der Dateien kann es passieren, dass die Rechte an der JavaApplicationStub verloren gehen. Diese muss als ausfĂŒhrbar markiert sein. Ein entsprechender Ant-Befehl stellt das sicher.

<target name="makeMac" depends="makeNormal">
<copy todir="deploy/Application.app">
<fileset dir="build_data/Application.app"/>
</copy>
<!-- chmod the application stub file executable -->
<chmod file="deploy/Application.app/Contents/MacOS/JavaApplicationStub" perm="755"/>
<copy file="deploy/Application.jar" tofile="deploy/Application.app/Contents/Resources/Java/Application.jar" />
</target>

Automatischer Deploy von Java-Applikationen oder: Ant Builds mit externen Jars und SVN-Informationen

Der Eclipse-verwöhnte Programmierer braucht sich eigentlich nicht mit Begriffen wie Deploy oder Build herumschlagen — zumindestens nicht so lange man in der Entwicklung ist. Ein Knopfdruck auf „Run“ und das Programm lĂ€uft. Sowohl alle lokalen Resourcen als auch alle externen Jars werden gefunden, eingebunden und können einwandfrei genutzt werden.

Möchte man die Applikation nun fertigstellen und anderen zur VerfĂŒgung stellen – oder frĂŒher im Rahmen von Enduser-Tests – so kommt es bei großen Projekten unweigerlich zu Problemen.

Im Folgenden beschÀftige ich mit den Problemen:

  1. Wie exportiere ich ein Projekt mit vielen externen Jars einfach und sicher in ein lauffÀhiges Jar?
  2. Wie stelle ich sicher, das sowohl in der Entwicklungsumgebung als auch in der Jar alle Bilder o.Ă€. Ressourcen wiedergefunden werden?
  3. Wie nutze ich einen eigenen Buildprozess und
  4. Wie kann ich im Buildprozess Zusatzinformationen wie die aktuelle SVN-Revision oder das Build-Datum verwerten?

„Automatischer Deploy von Java-Applikationen oder: Ant Builds mit externen Jars und SVN-Informationen“ weiterlesen