Java jar File in jar File verschachteln

xorg1990

New member
Hi, ich habe ein kleines Progrämmschen in Java erstellt, mit Hilfe von Eclipse.

Das Programm beinhaltet ein Websocket server, den ich wiederum schon als fertiges jar File vorliegen habe.

Das habe ich dann in den Projekt Einstellung eingefügt.
eclipse.png

Starte ich nun aus Eclipse heraus meine Anwendung ist alles in Ordnung.

Exportiere in nun mein Project als jar File, findet die JRE das Socket Server jar nicht mehr.
java.lang.ClassNotFoundException: org.java_websocket.server.WebSocketServer

Ich hättet ja gerne die Websocket server klasse in meinem exportierten jar File gerne mit drinnen. Geht das?

Oder muss ich auf die Source zurückgreifen und dann dort mit dem package Schlüsselwort arbeiten.

Am ende hätte ich gern eine einzige Datei.



*Ich hoffe doch das hier im Forum der ein oder andere mit Java rum macht. Ist ja schließlich die Programmiersprache des Jahres 2017:disgust:
 
mikdoe schrieb:
Soll das am Ende in einem Standard Browser laufen?
Nope.

Danke für den Link aber das ist nicht so recht das nachdem ich gesucht habe.

Ich habe ein Eclipse Projekt nennen wir es "Updater". Dieses Projekt benötigt diese lib: https://github.com/TooTallNate/Java-WebSocket/wiki

Diese lib habe ich in Eclipse als " Referenced Libraries" importiert. Starte ich das Projekt in Eclipse geht alles einwandfrei.

Exportiere ich mein Project als jar, fehlt mir dann die Socket lib. Eclipse packt die nicht mit ein.

Wie erreiche ich das, das ich am ende nur noch eine jar Datei habe.

*Durch mein unwissendes rumprobieren habe ich mir jetzt auch noch mein Projekt zerschossen. ich erhalte nun immer die Fehlermeldung:
The method onStart() of type com must override or implement a supertype method com.java /QRSSB_Linux_Launcher/src line 73 Java Problem

Bein ausführen kommt dann in dieser Zeile:
Code:
	@Override
	public void onError(WebSocket conn, Exception ex) {
		System.err.println("an error occured on connection " + conn.getRemoteSocketAddress()  + ":" + ex);
	}
eine NullPointerException.

Ja un nun??
 
Zuletzt bearbeitet:
Neieeeen nicht entpacken :grumpy: umgedreht verpacken.

Nochmal mein Projekt benötigt die lib Java-WebSocket. Die habe ich mir fertig kompiliert als jar File heruntergeladen.

Und in den Eclipse Einstellungen als Referenced Libraries angegebenen.

Exportiere ich nun mein Projekt als jar, findet die JRE die WebSocket lib nicht mehr. Das starten heraus aus Eclipse funktioniert problemlos.

Das manuelle hinzufügen der Klasse via winZip funktioniert nicht.
Ich muss also irgendwas an der manifest.mf Datei verändern, aber was???

Ich dachte ja Eclipse macht das.
 
umgedreht verpacken.
da bin ich mir fast sicher, dass das eclipse für dich m,acht

Nochmal mein Projekt benötigt die lib Java-WebSocket. Die habe ich mir fertig kompiliert als jar File heruntergeladen.
jeder andere hätte das jar einfach genommen

Ich muss also irgendwas an der manifest.mf Datei verändern, aber was???
classpath, aber das sollte eclipse vermutlich schon eingetragen haben
 
tsseh schrieb:
classpath, aber das sollte eclipse vermutlich schon eingetragen haben
Habs über ein Plugin gelöst Fat-jar:
Fat Jar Eclipse Plug-In


Aber mein Projekt funktioniert nicht mehr.
Habe diesen code in der Klasse com:
Code:
import java.net.InetSocketAddress;
import org.java_websocket.WebSocket;
import org.java_websocket.handshake.ClientHandshake;
import org.java_websocket.server.WebSocketServer;

public class com extends WebSocketServer {	
	private String usedComPort = null;
	private QRSSB_Linux_Launcher main = null;
	
	public com(InetSocketAddress address) {
		super(address);
	}

	@Override
	public void onOpen(WebSocket conn, ClientHandshake handshake) {
		conn.send(main.getComPorts());
	}

	@Override
	public void onClose(WebSocket conn, int code, String reason, boolean remote) {
		String bash_comm = null;
		if( usedComPort != null) {
			Runtime rt = Runtime.getRuntime();
			bash_comm = "stty -f /dev/"+usedComPort+ " hupcl";
	        try {
	       	 rt.exec(bash_comm);
			}catch (Throwable t){
				t.printStackTrace();
			}
		}
		Runtime rt = Runtime.getRuntime();
		bash_comm = "kill "+ main.getPid();
        try {
       	 rt.exec(bash_comm);
		}catch (Throwable t){
			t.printStackTrace();
		}
	}

	@Override
	public void onMessage(WebSocket conn, String message) {
		String[] commands = message.split(",");
		String onOrOff = commands[2];
		String comPort = commands[0];
		usedComPort = comPort;
		String bash_comm = null;//{"bash", "-c", "null"};
		
		if(onOrOff.equals("on")) {
			bash_comm = "stty -f /dev/"+comPort+ " -hupcl";
		}else {
			bash_comm = "stty -f /dev/"+comPort+ " hupcl";
		}
		Runtime rt = Runtime.getRuntime();
        try {
       	 rt.exec(bash_comm);
		}catch (Throwable t){
			t.printStackTrace();
		}
	}

	@Override
	public void onError(WebSocket conn, Exception ex) {
		System.out.println(conn);
		System.err.println("an error occured on connection " + conn.getRemoteSocketAddress()  + ":" + ex);
	}
	
	@Override
	public void onStart(){
		main = new  QRSSB_Linux_Launcher();
		System.out.println("server started successfully");
	}
Hier
Code:
@Override
	public void onStart(){
		System.out.println("server started successfully");
	}
Sagt mir Eclipse
The method onStart() of type com must override or implement a supertype method
Nehme ich das @Override weg ist die Fehlermeldung weg.

Aber beim Ausführen wird die Funktion gar nicht ausgeführt.

Starte ich dann eine Websocket Verbindung kommt es dazu:
an error occured on connection /127.0.0.1:58674:java.lang.NullPointerException
an error occured on connection /127.0.0.1:58674:java.lang.NullPointerException
an error occured on connection /127.0.0.1:58878:java.lang.NullPointerException
an error occured on connection /127.0.0.1:58878:java.lang.NullPointerException
an error occured on connection /127.0.0.1:58884:java.lang.NullPointerException
an error occured on connection /127.0.0.1:58884:java.lang.NullPointerException
an error occured on connection /127.0.0.1:58946:java.lang.NullPointerException
an error occured on connection /127.0.0.1:58946:java.lang.NullPointerException
an error occured on connection /127.0.0.1:58956:java.lang.NullPointerException
an error occured on connection /127.0.0.1:58956:java.lang.NullPointerException
an error occured on connection /127.0.0.1:39232:java.lang.NullPointerException
an error occured on connection /127.0.0.1:39232:java.lang.NullPointerException
an error occured on connection /127.0.0.1:39286:java.lang.NullPointerException
an error occured on connection /127.0.0.1:39286:java.lang.NullPointerException
an error occured on connection /127.0.0.1:40148:java.lang.NullPointerException
an error occured on connection /127.0.0.1:40148:java.lang.NullPointerException

Bevor ich mit dem Jar Exportieren angefangene ging alles tadellos.

- - - Aktualisiert - - -

Ok, gelöst. Habe auf die neuste java-websocket lib aktualisiert Version 1.3.6 geht jetzt.

Eine Farge habe ich dennoch.
Bei der Anwendung hantelt es sich um einen Updater. Diesen habe ich für Windows Systeme einmal in C# programmiert und für alle anderen Systeme in Java.
Der Upadter lädt ein Zip herunter und entpackt dieses dann in den Order indem sich die Updater.exe selbst befindet.

Mein bedenken ist halt kann ich eine exe ersetzten während diese selbst ausgeführt wird?
Für Java die selbe Frage kann ich ein jar File ersetzen Während dieses ausgeführt wird?
 
Zurück
Oben