Liebe Java-Auskenner,
ich möchte einem Router OpenWRT verpassen und erstmal den Weg ohne seriellen Zugriff versuchen:
https://openwrt.org/toh/tp-link/td-w8970_v1#statpost
Wenn ich die erwähnte JAR-Datei mit "openjdk 11.0.11" (Debian 10) laufen lasse, gibt es beim "Decrypt" einen Fehler, weil mit Java 11 die Java-EE-Module ausgelagert worden (https://openjdk.java.net/jeps/320):
Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter
Die Pakete libjaxb-api-java und libjaxb-java, in denen die Module jetzt scheinbar stecken, sind installiert. Aber wie bekomme ich die in Aktion?
Gibt es eine Möglichkeit, die JAR-Datei (mit geschickten Kommandozeilen-Optionen) und den Modulen zum Laufen zu bringen?
Im Internet habe ich nur Hinweise auf "Dependency der pom.xml hinzufügen" gefunden, das hilft mir nicht, ich kann nicht neu bauen.
Ich habe leider von Java gar keine Ahnung (zuletzt mit Java 2 gearbeitet :-) ), daher die (vielleicht dumme) Frage.
Über hilfreiche Antworten würde ich mich sehr freuen.
VG,
Erik
Hallo Christoph,
vielen Dank für die schnelle Antwort.
Am 22.06.21 um 22:46 schrieb Christoph Müller:
22.06.2021 22:29:11 Erik Schanze schanzi_@gmx.de:
Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter
Da sehe ich spontan folgende Ansätze:
- den classpath um die fehlenden libs erweitern.
1a) Entweder mit de Schalter -cp, ungefähr so "java -cp ... -jar jarfile.jar" 2a) Oder mit der CLASSPATH Umgebungsvariable
Die Klasse javax/xml/bind/DatatypeConverter steckt in der Datei /usr/share/jaxb/lib/jaxb-api.jar und ich versuchte Folgendes:
$ java -cp /usr/share/jaxb/lib -jar ~/Downloads/tp-link-td-w8970/StatPOSTer-20160306.jar
$ CLASSPATH=$CLASSPATH:/usr/share/jaxb/lib java -jar ~/Downloads/tp-link-td-w8970/StatPOSTer-20160306.jar
Leider kein Erfolg, es tritt der gleiche Fehler auf, er verwendet das neue JAR offenbar nicht.
- jars sind auch nur ZIP-Dateien. Darin gibt es im Ordner META-INF
eine Manifest Datei. Dort kann man auch ein Class-path(?) Attribut anlegen und dadurch zusätzliche jars referenzieren.
Da weiß ich leider auch nicht wie.
Danke,
Erik
Am 23.06.2021 um 07:36 teilte Erik Schanze mit:
Moin,
Die Klasse javax/xml/bind/DatatypeConverter steckt in der Datei /usr/share/jaxb/lib/jaxb-api.jar und ich versuchte Folgendes:
$ java -cp /usr/share/jaxb/lib -jar ~/Downloads/tp-link-td-w8970/StatPOSTer-20160306.jar
$ CLASSPATH=$CLASSPATH:/usr/share/jaxb/lib java -jar ~/Downloads/tp-link-td-w8970/StatPOSTer-20160306.jar
Leider kein Erfolg, es tritt der gleiche Fehler auf, er verwendet das neue JAR offenbar nicht.
IIRC folgt hinter dem Parameter -cp nicht der Pfad zum jar File, sondern der komplette Pfade und das File selber. So hat Christoph das auch geschrieben.
H.
Hallo Hilmar,
Am 23.06.21 um 08:18 schrieb Hilmar Preuße:
Am 23.06.2021 um 07:36 teilte Erik Schanze mit:
Die Klasse javax/xml/bind/DatatypeConverter steckt in der Datei /usr/share/jaxb/lib/jaxb-api.jar und ich versuchte Folgendes:
$ java -cp /usr/share/jaxb/lib -jar ~/Downloads/tp-link-td-w8970/StatPOSTer-20160306.jar
$ CLASSPATH=$CLASSPATH:/usr/share/jaxb/lib java -jar ~/Downloads/tp-link-td-w8970/StatPOSTer-20160306.jar
Leider kein Erfolg, es tritt der gleiche Fehler auf, er verwendet das neue JAR offenbar nicht.
IIRC folgt hinter dem Parameter -cp nicht der Pfad zum jar File, sondern der komplette Pfade und das File selber. So hat Christoph das auch geschrieben.
Du meinst:
$ java -cp /usr/share/java/jaxb-api.jar -jar ~/Downloads/tp-link-td-w8970/StatPOSTer-20160306.jar
Das geht leider auch nicht. Warum sollte ein "class path" auch auf eine Datei zeigen? Bei "path" erwartet man Verzeichnis, oder?
VG,
Erik
Hallo Erik,
On 2021-06-23 07:36, Erik Schanze wrote:
Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter
Da sehe ich spontan folgende Ansätze:
- den classpath um die fehlenden libs erweitern.
1a) Entweder mit de Schalter -cp, ungefähr so "java -cp ... -jar jarfile.jar" 2a) Oder mit der CLASSPATH Umgebungsvariable
Die Klasse javax/xml/bind/DatatypeConverter steckt in der Datei /usr/share/jaxb/lib/jaxb-api.jar und ich versuchte Folgendes:
$ java -cp /usr/share/jaxb/lib -jar ~/Downloads/tp-link-td-w8970/StatPOSTer-20160306.jar
hab mal versucht, das nachzustellen.
mit debian 10.10, openjdk 11.0.11
und jaxb (installiert per aptitude - libjaxb-api-java und libjaxb-java).
Kommt der Fehler beim Starten des Programmes (das funktioniert bei mir)?
Oder erst wenn du im Programm irgendetwas machst (was?) ?
Grüße,
Christoph
Hallo Christoph,
Am 23.06.21 um 10:06 schrieb Christoph Müller:
On 2021-06-23 07:36, Erik Schanze wrote:
$ java -cp /usr/share/jaxb/lib -jar ~/Downloads/tp-link-td-w8970/StatPOSTer-20160306.jar
hab mal versucht, das nachzustellen.
mit debian 10.10, openjdk 11.0.11
und jaxb (installiert per aptitude - libjaxb-api-java und libjaxb-java).
Kommt der Fehler beim Starten des Programmes (das funktioniert bei mir)?
Im der GUI auf "Decrypt" klicken, irgend ein Text-Datei auswählen und dann unter anderem Namen speichern. Dann erscheinen die Fehlermeldungen in der Konsole und die neue Datei wird nicht angelegt.
VG,
Erik
Hallo Erik,
On 2021-06-23 13:25, Erik Schanze wrote:
Am 23.06.21 um 10:06 schrieb Christoph Müller:
On 2021-06-23 07:36, Erik Schanze wrote:
$ java -cp /usr/share/jaxb/lib -jar ~/Downloads/tp-link-td-w8970/StatPOSTer-20160306.jar
hab mal versucht, das nachzustellen.
mit debian 10.10, openjdk 11.0.11
und jaxb (installiert per aptitude - libjaxb-api-java und libjaxb-java).
Kommt der Fehler beim Starten des Programmes (das funktioniert bei mir)?
Im der GUI auf "Decrypt" klicken, irgend ein Text-Datei auswählen und
Ja, damit kann ich es nachstellen ... schaun wir mal ...
Die manpage zu java sagt nicht viel, aber
java --help
sagt 'ne Menge. Auch was zu -cp & Co.
Erster Versuch: java -cp /usr/share/java/jaxb-api.jar -jar StatPOSTer-20160306.jar
führt zu java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter
Zweiter Versuch: java -classpath /usr/share/java/jaxb-api.jar -jar StatPOSTer-20160306.jar
Selbes Ergebnis.
Verständlich. Die sollten ja synonym sein.
Mal ins jar schauen ...
pisi@debianTesting:~/jaxb-java11-issue$ unzip -l /usr/share/java/jaxb-api.jar | grep DatatypeConverter 7176 2018-11-01 22:46 javax/xml/bind/DatatypeConverter.class [..] Ja, da ist die Klasse drin.
Theorie ... wenn wir -jar nutzen, dann ignoriert er -cp. Kann das wer bestätigen?
Jedenfalls komme ich mit folgender Variante weiter:
java -cp /usr/share/java/javax.activation.jar:/usr/share/java/jaxb-api.jar:/usr/share/java/jaxb-impl.jar:/usr/share/java/jaxb-core.jar:StatPOSTer-20160306.jar StatPOSTer
Einfach alle jaxb jars und das app-jar als classpath angeben und dann den Namen der Main-Klasse (StatPOSTer, gefunden im Manifest des app jars) drangehängt.
(Das aktuelle Verzeichnis muss dort sein, wo das app jar liegt. Oder das app jar muss auch mit absolutem Pfad referenziert werden)
Jetzt bekomme ich:
2021.06.23 20:26:45 config decrypt: java.io.IOException: javax.crypto.IllegalBlockSizeException: Input length not multiple of 8 bytes
Aber das liegt sicher an meinem dummy Inputfile.
Grüße,
Christoph
Hallo Christoph,
Am 23.06.21 um 20:33 schrieb Christoph Müller:
java -cp /usr/share/java/javax.activation.jar:/usr/share/java/jaxb-api.jar:/usr/share/java/jaxb-impl.jar:/usr/share/java/jaxb-core.jar:StatPOSTer-20160306.jar StatPOSTer
Einfach alle jaxb jars und das app-jar als classpath angeben und dann den Namen der Main-Klasse (StatPOSTer, gefunden im Manifest des app jars) drangehängt.
(Das aktuelle Verzeichnis muss dort sein, wo das app jar liegt. Oder das app jar muss auch mit absolutem Pfad referenziert werden)
Vielen Dank, dass du dir solche Mühe gemacht hast. Es funktioniert wunderbar! Da wäre ich nie drauf gekommen.
Vielen Dank nochmal,
Erik
lug-dd@mailman.schlittermann.de