Creative Commons Lizenzvertrag

Donnerstag, 20. September 2012

Bedingte Compilierung und Versionierung unter Java

Leider kennt ja Java keinen Präprozessor-Anweisungen wie die C-Sprachen. Gerade die Möglichkeiten der bedingten Compilierung fehlen hier. Aber es gibt mindestens 2 Ersatz-Lösungen:


  1. Ant
  2. Finale Konstanten in If-anweisungen. Der Javacompiler erkennt dadurch einfach entstehenden toten Code und lässt ihn weg.


Nähere Einzelheiten findet man z.B. hier. Diese Möglichkeiten sind im allgemeinen völlig ausreichend. Was aber wenn man Projekte hat die zusätzliche Dateien haben die kein Quelltext sind, z.B. Resourcendateien. Sprachdateien werden ja durch die meisten Entwicklungsumgebungen mit unterstützt. Aber was macht man wenn man Projekte hat die sich beispielsweise durch die Menüstruktur unterscheiden. Ich möchte eine kostenlose und eine bezahlbare Version einer Software produzieren die sich im Funktionsumfang unter scheiden. Dann hilft keine IDE mir da so richtig weiter. Benutz man eine Sprache wie C# ist dies auch kein größeres Problem, da die Menüerzeugung per Programm geschieht. Zwar wird der Code dazu automatisch generiert, aber man kann ihn ändern. Er wird zwar bei Änderungen immer wieder neu generiert, aber die kann man umgehen in dem man die Teile die man erhalten will in eine eigene Datei auslagert. Schwieriger ist dieses Problem allerdings wenn man Java und Eclipse benutzt um eine Android-App zu entwickeln. Zwar kann man auch dort beispielsweise Menüs oder Layouts per Code erzeugen aber die kompliziert die Sache erheblich da es keine Grafische Darstellung dann mehr gibt. Zusätzlich wird der erzeugte Code um etliches größer und auch langsamer. Ich habe das Problem dadurch gelöst das ich für jede Variante ein eigenes Projekt benutze. Ich habe dazu ausgehend von einem Grundprojekt entsprechende Kopien angelegt. Damit waren erstmal alle Varianten gleich. Danach habe ich in den abgeleiteten Projekten alle Dateien gelöscht die sich vom Grundprojekt nicht unterscheiden. Diese habe ich nun als Hardlinks eingefügt. Dadurch sind nun bei einer Änderung in einem Projekt die Änderungen auch in den anderen Projekten enthalten. 

Kleiner Tipp am Rande: Hardlinks sind auch unter Windows möglich wenn man als Dateisystem NTFS benutzt. Allerdings werden Hardlinks von Hause aus nur per Kommandozeile unterstützt, es gibt aber Erweiterungen für den Explorer.

Dadurch ist es nun möglich verschiedene Versionen ein und derselben Android-App ohne größeren Aufwand zu erzeugen.

0 Kommentare:

Kommentar veröffentlichen

Marmel powered by Instant Communities