2011-01-07 8 views
1

Ich versuche, den Klassenpfad in meinem Projekt zur Laufzeit zu durchsuchen. Wir verwenden Maven für Build Management und Hudson für CI. Auf meiner lokalen Box funktioniert natürlich alles super. Wenn Hudson Komponententests ausführt, kann es jedoch keine während des Builds generierten Klassen finden - Maven sollte sie in ./target/classes setzen, aber wenn ich den Klassenpfad (System.getProperty("java.class.path")) von Hudson aus protokolliere, erhält ich nur eine Liste mit zwei Maven. verwandte JARs - überhaupt keine Verzeichnisse und schon gar nicht das Compiler-Ausgabeverzeichnis des aktuellen Projekts. Ist das Hudson schuld? Maven? Gehe ich in die falsche Richtung?Hudson verwendet Maven-generierten Klassenpfad nicht?

ETA: I denken dies könnte durch die Aktualisierung der Maven-Laufzeit von Hudson behoben worden sein. Das Problem war, dass wir über Reflektion nach Plug-in-Klassen suchten, ähnlich wie die Ideen in this post - nicht der eigentliche Code, aber es gibt Ihnen die Idee. Wie auch immer, es hört sich an, als ob Hudson einen Klassenpfad benutzt, der nur das eigentliche Test-Netzwerk "bootstrappt"; Aus welchem ​​Grund auch immer scheint es jetzt behoben zu sein. Lange Rede, kurzer Sinn: Wenn Sie ein ähnliches Problem haben, versuchen Sie, Ihren Maven zu aktualisieren.

+0

Was genau ist das Problem? Scheitern Tests mit Klassenpfadfehlern? – Raghuram

+0

Bauen Sie Ihre Artefakte in Ihrem Hudson Job mit Maven? Wenn ja, warum benutzen Sie nicht auch Maven, um die Unit-Tests sofort auszuführen? Würde wie ein Zauber wirken. Alles wird von Maven verwaltet und daher keine Classpath-Probleme. Wenn Sie, aus welchem ​​Grund auch immer, zwei Build-Schritte haben, wobei der erste die App erstellt und der zweite die App testet, beachten Sie, dass Änderungen am Klassenpfad in den folgenden Build-Schritten nicht möglich sind. --- Sie können übrigens die Unit-Tests auf einer Dev-Maschine mit dem Parameter '-Dmaven.test.skip = true' überspringen. –

Antwort

0

Zwei Fixes. Eins, upgrade Maven. Zweitens: Verlassen Sie sich nicht auf Classpath-Hacker, um über Dinge, die Ihr Klassenlader sehen kann, zu iterieren, sondern über den Trick der "Ressourcenentdeckung", auf den in der Beschreibung Bezug genommen wird.