jQuery 1.8 / 1.9

Das jQuery Project hat einen Blogpost rausgehauen, der die erste Beta von jQuery 1.8 vorstellt. Gleichzeitig wird aber auch ganz allgemein darauf hingewiesen, was sich in den Version 1.8 und 1.9 ändert wird.

Im Großen kann man das zusammenfassen (API-relevant):

  • jQuery wird modular, d.h. man kann angepasste, kleinere Varianten bauen
  • Deprecated-Marker für  Zeug wie: $.browser, $.sub, jqXHR.success, jqXHR.error, jqXHR.complete (seit 1.5 durch Deferred). In 1.9 verschwindet es dann, und ist dann nur noch über das spezielle 1.9er Kompatibilitätsplugin erreichbar

Der Blogpost zeichnet auch noch die Built-in Fähigkeit aus, das jQuery nun sowohl automatisch Vendor-Präfixe nutzt und Animations besser unterstützt. Ob damit so etwas wie jQuery++ Animations gemeint ist?

ANT: Dateien kopieren und *nie* überschreiben

Der Ant-Task „copy“ kopiert eine Datei oder eine Sammlung von Dateien. So einfach, so gut. Der Task ist mit den Filesets sehr komplex einsetzbar. Auch toll.

Allerdings ist es nicht möglich, Dateien von einem Ort A nach Ort B zu kopieren, ohne dass das Ziel überschrieben wird — egal ob die Quelldatei neuer als das Ziel ist. Das Attribut „overwrite“ gilt nämlich nur für den Fall, wenn die Quelle älter ist. Ähm, wie bescheuert ist das?

Das ursächliche Problem ist, dass ein Maven-Plugin mehrmals ausgeführt wird (lässt sich akut nicht verhindern). Das erste Mal ist der richtige Zeitpunkt, das zweite Mal jedoch nicht (konkret: es sollen nicht CoffeeScript-Dateien mit JSLint gecheckt werden…)

Code 1: Funktioniert *nicht* wie gewünscht:

Beim zweiten Kopieren (mit einer neuen Quell-Datei!) wird das Ziel überschrieben, obwohl overwrite deaktiviert ist.

Glücklicherweise gibt es die mir noch unbekannten Ant Selectors, die dafür genutzt werden können.

Die Logik: Man kopiert in das Verzeichnis A das Fileset aus Verzeichnis B, aber selektiert dort nur die Dateien, die noch nicht in Verzeichnis A vorhanden sind. Problem gelöst.

Code 2: Die Lösung

Und: Die Selektoren sind sehr mächtig, es gehen also hübsche abgefahrene Dinge wie „nur Dateien die im Target neuer sind“, usw.

In Maven die Repository Locations deaktivieren!

Fügt man bei einem Maven-Prozess das Goal „site“ ein, dann werden u.a. alle irgendwo referenzierten Repositories geprüft. Das kann nicht nur lästig sein, sondern ist bis Weilen auch eine minutenlange Angelegenheit. Dazu kommt, das leider einige Artefakte veraltete (und nicht mehr existierende) URLs eingetragen haben. Außerdem „beeinträchtigen“ sie das Log, denn die ungültigen Repository-Quellen werden als unschöne „Warnung“ ausgegeben.

Beispiel:

[WARNING] The repository url ‚file://${basedir}/stage‘ is invalid – Repository ‚local-mime4j-stage-repository‘ will be blacklisted.

Eine direkte Konfigurationsoption zum Deaktivieren fehlt dem Plugin leider. Zwar sind die verwendeten Report-Plugins nicht die neusten, dennoch ist dies unschön.

Aber, es gibt Abhilfe. Da hat jemand die Lösung gefunden: Einfach dem Java-Prozess (Maven..) folgende Umgebungsvariabel setzen: dependency.locations.enabled=false.

Beispiel:

mvn clean install site -Ddependency.locations.enabled=false