Integritätsprüfung der JAR-Datei

Ich bin Softwaretester. Wir stellen unserem Kunden eine JAR-Datei zur Verfügung und es ist nun schon zum zweiten Mal passiert, dass die JAR-Datei nicht alle benötigten Klassen enthält. Ich weiß nicht, wie das aus Entwicklungssicht passieren kann, da ich davon ausgegangen bin, dass Eclipse immer alle Klassen zur JAR-Datei hinzufügen würde.

Wie auch immer, gibt es ein Tool, das die Integrität einer JAR-Datei mit den folgenden Anforderungen überprüfen kann:

  • erhält alle newAnweisungen im JAR (durch Reflektion?) und prüft, ob die Klasse aufgelöst werden kann
  • läuft unter Windows (insbesondere 7 SP1 x64)
  • ist kostenlos / kostenlos, Open Source bevorzugt

Aktualisieren

Die Art und Weise, wie ich an dieses Tool denke, ist

C:\>checkjar.exe myjar.jar
Checking JAR file integrity ...
Class org.mycompany.MyClass is referenced by org.mycompany.MyApp.doSomething(String args) but the class does not exist

Ich brauche nicht

  • ein Tool zum Ausführen von JUnit-Tests, da wir im Moment keine Unit-Tests haben. Ich arbeite daran.
  • ein Tool zum Ausführen von Integrationstests. Ich gestehe, wir haben noch keinen, aber wir müssen nur einen aus den verfügbaren auswählen.

Irgendwann wird es eine Aufgabe sein, das JAR-Checker-Tool in JUnit-Tests oder so etwas zu integrieren. Im Moment habe ich nur das JAR und ich brauche ein Tool, um es auf fehlende Klassen zu überprüfen. Ausführlichere Tests werden voraussichtlich als JUnit-Tests realisiert.

Antworten (2)

Das Erstellen von Paketen mit der IDE wird heutzutage nicht mehr als gute Praxis angesehen. Es ist fehleranfällig, da es sich um einen manuellen Prozess handelt. (Sie können mehr über modernste Softwareentwicklung in Head First Software Development lesen .)

Sie sollten ein Build-Tool wie Maven oder Gradle zum Erstellen des Projekts/Jars verwenden. Dies macht den Build-Prozess wiederholbar und zuverlässig. Ich denke, dass dies Ihr Problem bereits lösen wird, da Sie sich nicht darauf verlassen, dass der Entwickler beim Erstellen des Jars in der IDE die richtigen Kontrollkästchen aktiviert. Sobald sich eine Klasse im generierten Jar befindet, befindet sie sich immer im generierten Jar.

Zusätzlich können Sie automatisch einen Integrationstest gegen das Jar durchführen. Beginnen Sie mit einem Test, der nur das Jar ausführt. Weitere Details zum Ausführen von Integrationstests mit einem Jar finden Sie hier: http://blog.sonatype.com/2009/06/integration-tests-with-maven-part-1-failsafe-plugin/

Wir haben keine Integrationstests - vielleicht hätte ich das in meiner Frage vermerken sollen, sorry. Einer der ersten Integrationstests, die ich gerne durchführe, ist der erwähnte Test der fehlenden Klassen.
Dann folge meinem Rat ;-)
Vielleicht habe ich Ihre Antwort nicht verstanden ... Failsafewerde nach der Paketphase Tests durchführen. Das brauche ich nicht, da ich derzeit Tests manuell durchführe, was auch nach der Paketphase ist. Surefirewird JUnit-Tests ausführen. Ich habe keine JUnit-Tests. Mavenwird JUnit-Tests ausführen. Dito. Entschuldigung, im Moment kann ich nicht sehen, wie Ihre Antwort ein Tool zum Überprüfen einer JAR-Datei auf newAnweisungen bereitstellt.
Ich habe meine Antwort überarbeitet, weil ich denke, dass das Problem mit den richtigen Werkzeugen vermieden werden könnte. (Ein Ziel automatischer Tests ist es, Fehler zu finden, bevor Sie mit dem manuellen Test beginnen, und dadurch Ihre wertvolle Zeit nicht zu verschwenden.)

Ich würde ein Test-Setup vorschlagen, das aus einer virtuellen Maschine besteht, die nur Windows oder ein minimales Linux und Java enthält und auf dem Ihre JAR-Läufe getestet werden (Sie können nach jedem Lauf aus einem Snapshot wiederherstellen, um sicherzustellen, dass es in Ordnung läuft).

VirtualBox ist eine gute kostenlose virtuelle Maschine, und wenn Sie unter Linux testen (die JAR-Dateien sollten unter Linux genauso gut laufen wie unter Windows), benötigen Sie keine Betriebssystemlizenz.

Ich arbeite bereits an der Testautomatisierung mit virtuellen Maschinen. Bis wir diese Tests haben (es wird ungefähr 12 Monate dauern), ist es unmöglich, das JAR vollständig (alle Pfade) auf fehlende Klassen zu testen. Daher dachte ich, Reflexion könnte zumindest einen 100% fehlenden Klassentest machen.