Es ist recht einfach, ein komplettes Projekt als SWC zu kompilieren: Rechtsklick auf’s Projekt -> Run as -> FDT SWC Library (Quelle). Ein Ant-Skript wäre schöner, aber grundsätzlich ist es so erst mal einfach. Was die Sache nämlich an anderer Stelle verkompliziert, ist der allseits beliebte Fehler 1047:
Parameter initializer unknown or is not a compile-time constant.
bzw.
Parameterinitialisierer unbekannt oder keine Kompilierungszeit-Konstante.
Dieser tritt dann auf, wenn man eine Konstante als default-Übergabe-Parameter nutzt, und die Klasse mit der Konstante erst nach dieser Klasse kompiliert wird. Oder so. Es gibt haufenweise Einträge dazu im Bug-Tracker, teilweise schon jahrealt, leider ohne Ergebnis. Die längste Antwort von Adobe (die nicht “OK, wird noch mal geprüft” lautet) ist “Wäre schwierig zu implementieren, machen wir nicht.”^^
Deshalb folgende Lösungsansätze:
- Ein Workaround im Netz ist es, einfach keine Konstanten zu nutzen – das ist natürlich Quatsch.
- Ein anderer ist es, die entsprechende Funktion zu ändern – statt “foo:Number=MyConstants.FOO” “foo:Number=NaN”. Man prüft dann in der Funktion auf NaN, und setzt ggf. dort erst die Konstante. Das funktioniert, aber das will man eigentlich nicht für externe Libraries (ich meine damit projektexterne Libraries, nicht das Projekt an sich, was hier ja auch eine Library werden soll^^) .
- Dann: Unter Project Properties -> FDT Build Path -> Build Order die Reihenfolge der SWCs und Sourcefolder so zu ändern, dass die Klasse eben zuerst kompiliert wird. Geht auch nur, wenn Konstanten-Klasse und aufrufende Klasse
in verschiedenen Packages liegeneinen separaten Eintrag im Build-Path haben - Deshalb habe ich gerade
ein neues Packageeinen neuen Ordner angelegt, zum Build-Path hinzugefügt, dort unter den korrekten Pfad die aufrufende Klasse verschoben, unddieses neue Packagediesen neuen Ordner (heißt bei mir “compilerbug”) mit der oben beschriebenen Methode als erstes kompiliert 🙁 auch unschön, aber so muss ich wenigstens keine Klasse anderer Leute anfassen
Das nervt mich gerade extrem, hat jemand eine bessere Lösung?
Pingback: Default parameter aus anderer Klasse - Flashforum