Wie erstelle ich ein lauffähiges SWT jar

HuberDe

Mitglied
Hallo zusammen,

ich habe ein Java Projekt mit getrennten Source und Ausgabeverzeichnissen angelegt und dort ein paar kleine SWT files implementiert. Jetzt würde ich gerne ein Jar erstellen, damit ich dieses Programm auch ausserhalb von Eclipse starten kann.
Mit dem Jar exportieren von Eclipse komme ich garnicht zurecht. Keine Ahnung was ich da alles einstellen muss. Wenn ich FatJar benutze, kommt ein Jar dabei raus, jedoch wenn ich es starte, passiert rein garnichts. Kein Fehler, nichts.

Kann mir jemand irgendwie helfen!?

Danke
 
Hallo,

schau mal hier
http://www.tutorials.de/forum/java/242474-eclipse-export-jar.html

Dann muss du zusätzlich eine Manifest.mf Datei erstellen mit diesem Inhalt
Code:
Manifest-Version: 1.0
Class-Path: swt.jar
Main-Class: package.MainKlasse

Diese Datei musst du dann beim Exportieren angeben. Für die SWT.jar kannst du jeden Pfad angeben. die Datei muss sich aber auch dort befinden. :)

So müsste es dann funktionieren.

MFG

zEriX
 
So ich habe jetzt getestet. Leider ohne Erfolg.

Ich habe ein total simples Projekt "jarTestProject" erstellt, eine SWT.jar in das Verzeichnis kopiert und in den buildpath eingebunden. Zudem habe ich noch eine Visual Class "test.java" erstellt. Dann eine Manifest.mf erstellt die folgendermaßen aussieht:

Code:
Manifest-Version: 1.0
Class-Path: jarTestProject/swt.jar
Main-Class: test

Wenn ich damit ein jar exportiere bekomme ich folgenden Fehler:

Code:
Failed to load Main-Class manifest attribute from D:\workspace\jarTestProject\test.jar

ändere ich die Manifest.mf folgendermaßen ab:

Code:
Manifest-Version: 1.0
Main-Class: test
Class-Path: jarTestProject/swt.jar

kommt beim starten des jar folgende Fehlermeldung:

Code:
Could not find Main-Class. Program will exit

was sich für mich schonmal besser anhört. Er scheint jetzt das swt.jar zu finden. Jedoch die Main class "test" nicht. Ich verstehe nicht warum?

Ich hoffe mir kann jemand helfen. Bin hier am Verzweifeln....
 
Wie sieht denn deine Verzeichnisstruktur aus?

Hattest du die main-Klasse auch für das Jar ausgewählt?

Die swt.jar darf sich nicht im Jar-File befinden.


MFG

zEriX
 
momentan liegt alles im gleichen Verzeichnis. Und ja die SWT hab ich auch mit reingepackt. Ich werde sie jetzt aber mal rauswerfen und testen. Was muss ich denn dann immer in das jar mit reinpacken? Nur die klassen? Und die verwendeten Jars werden dann nur in der manifest angegeben?
Wie muss ich die Pfade in der Manifest angeben? Inkl. dem Projectordner oder ab dem Projectordner oder wie läuft das?

Viele Fragen, sorry ;-)
 
Wenn du für das Jar keinen Pfad angibst, sondern nur "swt.jar", dann muss dieses Jar im gleichen Verzeichnis liegen wie dein Jar. Für die Klasse mit der Main-Methode musst du nur die Packages und den Klassennamen angeben.

MFG

zEriX
 
ok, alles klar. Soweit sogut. Ich habe jetzt alles soweit geändert, dass meine Test.java jetzt auch groß geschrieben ist. Ebenso die Manifest.mf. Ich habe in das Jar dann nur noch die Test.class und die Manifest.mf aufgenommen. Ebenso die Manifest selbst folgendermaßen geändert:

Code:
Manifest-Version: 1.0
Main-Class: Test
Class-Path: swt.jar

Aber ich bekomme immer noch die Meldung: "Could not find main class ....".

Muss ich das jar mit irgendwelchen Parametern starten? Ich mache momentan nur einen Doppelklick im Datei-Explorer.
 
ok, nächstes Problem :-(

Ich habe bei meinem eigentlichen Project beim erstellen ausgewählt, dass er Quell und Zielordner trennen soll. D.h. dass ich einen src und einen bin Ordner habe. Mit diesen Projekteinstellungen bekomme ich mein Testprojekt jetzt wieder nicht mehr zum Laufen, obwohl ich die Manifest.mf wie folgt geändert habe:

Code:
Manifest-Version: 1.0
Main-Class: src/Test
Class-Path: lib/swt.jar

Kannst Du mir den Unterschied zwischen normalem Projekt und Projekt mit getrennten Ordnern erklären? Ich dachte es wäre so einfach aufgeräumter. Aber irgendwie habe ich dadurch dann auch Probleme mit dem Zugriff auf Ressourcen wie Bilder und properties files.

Ich habe beispielsweise ein MessageBundle angelegt, welches ich folgendermaßen hole:

Code:
bundle = ResourceBundle.getBundle("Messages");

Diese Message file muss jetzt aber direkt im bin Verzeichnis liegen. Und ich habe es auch nicht hinbekommen sie oberhalb vom bin anzusiedeln. Ursprünglich wollte ich im Projekt Ordner einen Ordner "configuration" anlegen und dort unter anderem die Message.properties reinpacken. Ich dachte mir dann ich könnte mit

Code:
bundle = ResourceBundle.getBundle("/configuration/Messages");

darauf zugreifen. Aber das geht nicht. Ich verstehe nicht warum!?

Sorry, dass ich die zwei Themen jetzt so vermische :-(

Nochmal was ich wissen möchte:
1. wie muss ich die Manifest ändern, damit ich mit einem Projekt in dem source und target ordner getrennt sind, mein jar zum Laufen bekomme?
2. wie funktioniert die referenzierung von Dateien in einem solchen Projekt.

Danke
 
Zurück