Wie kann man mithilfe von maven herausfinden, welche JAR-Datei eine Klasse zur Laufzeit bereitstellt?

Ich starte meine Anwendung mit mvn jetty: run

Zur Kompilierungszeit ist alles in Ordnung, meine Zeile

  Tidy tidier = new Tidy();
    tidier.setInputEncoding("UTF-8");

Kompiliert gut und der Klassenpfad zeigt das entsprechende Glas. Zur Laufzeit erhalte ich jedoch die folgende Ausnahme und kann nicht verstehen, warum:

2009-11-11 17:48:53.384::WARN:  Error starting handlers
java.lang.NoSuchMethodError: org.w3c.tidy.Tidy.setInputEncoding(Ljava/lang/String;)V

Ich denke jetzt, dass sich in meinem Klassenpfad möglicherweise zwei verschiedene Versionen dieses Ordners befinden (der eine wird anscheinend nicht als ordentlich bezeichnet, sonst könnte ich ihn in dem Klassenpfad erkennen, der von maven angezeigt wird). Ich versuche herauszufinden, um welche JAR-Datei es sich handelt. Bisher habe ich Folgendes versucht:

Class<?> tidyClass = Class.forName(Tidy.class.getName());
ClassLoader tidyLoader = tidyClass.getClassLoader();
String name = Tidy.class.getName() + ".class"; // results in tidyClass=class org.w3c.tidy.Tidy
System.out.println("resource="+tidyLoader.getResource(name)); // results in tidyLoader=org.codehaus.classworlds.RealmClassLoader@337d0f
System.out.println("path="+tidyLoader.getResource(name).getPath()); // results in resource=null

Ich habe irgendwo gelesen, dass der Pfad das Glas zeigen soll, aber anscheinend nicht mit diesem Klassenlader ... wie kann ich es herausfinden? Alles funktioniert wie ein Zauber in der Sonnenfinsternis, aber wenn ich mit Maven renne, bekomme ich dieses Durcheinander. Übrigens, sagt die Sonnenfinsternis

tidyClass=class org.w3c.tidy.Tidy
tidyLoader=sun.misc.Launcher$AppClassLoader@1a7bf11
resource=null so no jar info either.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage