Zum Inhalt springen

Jar Manifest


Krain

Empfohlene Beiträge

Hi zusammen,

Ich will meine Java-Applikationen in Windows ausführbar machen.

Jetzt habe ich gelesen, daß man die Klassen in ein Jar-Archiv stellen kann und dann irgentwie im Manifest festlegen kann, welche Klasse der Einstiegspunkt sein soll.

Kann mir mal einer erklären,wie das genau funktioniert?

Danke im voraus

Krain

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

hier http://java.sun.com/docs/books/tutorial/jar/basics/index.html findest Du einen recht guten überblick über jar files und da ist auch ein link über das Manifest.

Für eine ausführbare JAR-Datei muß folgende Zeile in das Manifest:


Main-Class: KlasseMitMAIN

Wobei hier hier KlasseMitMAIN als Platzhalter für den Klassenname steht. Wenn also die Klasse mit der mainFunktion dtwn heißt, dann mußt es komplett so aussehen. Das jar erhält den Namen myJar.jar!

Manifest-Version: 1.0

Created-By: NetBeans IDE

Specified-By: /myJar.jarContent

Main-Class: dtwn

falls Du die Klasse in einem Package hast, dann sie das Manifest so aus. Das package heißt beispielsweise com.foo.bar

Manifest-Version: 1.0

Created-By: NetBeans IDE

Specified-By: /myJar.jarContent

Main-Class: com.foo.bar.dtwn

Für fragen bin ich offen

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ja gut -

ich versuche mit dem Befehl

$ jar cmf meinManifest.txt Haupt.jar Haupt*.class
das Manifest im Archiv zu erzeugen. In meinem Manifest steht:

Manifest-Version: 1.0

Created-By: 1.3.1_01 (Sun Microsystems Inc.)


Main-Class: Haupt
aber das Programm lässt sich trotzdem nicht ausführen, bzw. wenn ich es wieder entpacke steht im Manifest nur

Manifest-Version: 1.0

Created-By: 1.3.1_01 (Sun Microsystems Inc.)


Ich weiß nicht, was ich hier falsch mache

Link zu diesem Kommentar
Auf anderen Seiten teilen

LOL,

das Problem das die letzte Zeile nicht im Manifest steht hatte ich auch!

einfach die Manifest File mit dem Notepad editieren und nocheinmal RETURN drücken nach deiner letzten Zeile!, steht auch irgendwo in der Doku von Sun!

also, probiere es mal mit

1:Zeile | Manifest-Version: 1.0 (RETURN)

2:Zeile | Main-Class: Test (RETURN)

3:Zeile |

gruß

Stefan

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hmm,

versuche es doch einmal mit dem Befehl

jar cvmf meinmanifest Haupt.jar *.class

sonst könnte evtl. der Eintrag

Class-Path: Haupt.jar

in der Manifest Datei evtl. noch helfen, probiere es einfach mal!

Achso, und auf jeden Fall kontrollieren ob die *.jar Dateien auch mit javaw geöffnet werden!

gruß

Stefan

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ja - das hab ich ja probiert - ich hab jetzt auch den Path mit angelegt, aber wenn ich es mit javaw öffne bringt er mir trotzdem den Fehler:

Could not find main-Class

obwohl das meine Haupt.class doch ist.:confused:

Ich hab in der Haupt.class meine main-Funktion stehen, die eigentlich nur eine andere Klasse - nämlich einen schlichten JPanel - aufruft.

Ich hab mir mal die DemoProgramme aus dem JDK angesehen, und da steht auch nicht mehr oder weniger im Manifest als bei mir.

Die lassen sich aber über Doppelklick ausführen!

Irgendwo hab ich da einen gewaltigen Denkfehler glaube ich.

Oder muß ich da in der main-Funktion noch was wichtiges reinschreiben, worauf ich nicht geachtet habe?

Meine Hauptklasse sieht so aus:

public class Haupt

{


	public static void main(String[] args)

	{

		new Magic();

	}

}

Aber trozalledem Danke für Deinen Tip - Ich sag bescheid, wenn ich weitergekommen bin

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich krieg das einfach nicht hin!

Ich weiß nicht, was ich noch ausprobieren soll,

Kann mir jemand noch mal ganz langsam - sozusagen für einen Nichtsversteher wie mich - erklären, wie ich aus meiner Ansammlung von .class Dateien, von denen nur eine eine main-Routine enthält ein ausführbares Programm machen kann.

Im Moment starte ich meine Programme entweder über meinen Editor(den JCreator) oder über die Eingabeaufforderung!

Noch einmal ein Aufruf an alle:

Wie kann ich meine Programme unter Windows ausführbar machen??

Ich versuch das jetzt schon seit drei Tagen, und jetzt qualmt:confused: mir langsam der Kopf!

Link zu diesem Kommentar
Auf anderen Seiten teilen

also schicke dir einfach mal die Befehlszeile mit der ich aus mehreren class Dateien plus ein Image aus einem Unterverzeichnis!

jar cvmf meinmanifest Rechner.jar Test.class Test$1.class Test$2.class Test$3.class NumericJTextField.class CloseableJFrame.class Images/test.jpg

das sind "alle" class Dateien einzeln aufgeführt die nach der Comp. in meinem Projekt Verzeichnis vorhanden waren, weiß nicht ob Test$1.class etc. wirklich nötig sind , aber es geht!

sonst kann ich dir leider auch nicht weiterhelfen, hatte selber meine "großen" Probleme beim erstellen der Jar Datei! aber irgendwie ging es dann mal! hab mir den Befehl dann als bat gespeichert LOL!

Hoffe du bekommst es hin,

sonst schick mir doch einfach mal die *.class Dateien und ich schaue ob es bei mir geht!

gruß

Stefan

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 2 Jahre später...

Sorry - Habe schon wieder eine Frage dazu:

[JRE 1.5]

Ich habe mit Eclipse3.0 ein JAR-Archiv meines Projektes erstellt, dazu eine Manifest-Datei mit passender Main-Class angegeben.

Wenn ich das JAR-Archiv nun mit

java -jar MeinArchiv.jar
ausführe funktioniert es! Allerdings mit:
javaw MeinArchiv.jar
kommt die Meldung Main-Class nicht gefunden. Hier nochmal mein Manifest:

Manifest-Version: 1.0

Created-By: Eclpise3.0

Main-Class: ag.firma.main.Main

Kann mir jemand weiterhelfen? Ich will das Archiv später mit dem Richtigen Programm verknüpfen, damit auch andere es verwenden können. Anderen ist das mit dem tippen von java -jar ... zu kompliziert. Ich hatte es schon mal hinbekommen, aber jetzt funktioniert es nicht mehr.

Danke

markus

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 4 Monate später...

Neues Problem... Ich bekomme meine Jar-Datei unter Windows zum Laufen benötige allerdings das xerxes.jar darin.

Aus Eclipse raus funktioniert es.

Also habe ich das xerxes.jar Archiv mit in das root-Verzeichnis meiner Jar-Datei gepackt. Ich weiß, dass dieses Thema hier im Forum schon mehrmal besprochen wurde.

Ich habe folgendes ausprobiert mit stets dem selben Ergebnis:

- xerxes.jar ins Root-Verzeichnis meiner Jar-Datei gepackt mit der Angabe im Manifest [Class-Path: ./xerxes.jar]

- xerxes.jar außerhalb meines Jar-Archives, aber in der Path-Variable von Windows eingetragen

Kann mir jemand weiterhelfen?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich habe folgendes ausprobiert mit stets dem selben Ergebnis:

- xerxes.jar ins Root-Verzeichnis meiner Jar-Datei gepackt mit der Angabe im Manifest [Class-Path: ./xerxes.jar]

- xerxes.jar außerhalb meines Jar-Archives, aber in der Path-Variable von Windows eingetragen

Version 1 kannst du vergessen, das funktioniert nicht (zumindestens nicht ohne eigenen ClassLoader).

Das JAR im Path zu haben nützt auch nichts, wenn schon dann bitte im Classpath.

Am besten liest du dir ein Java Beginner Tutorial durch, in dem auch das Thema JARs, Classpath und Programme von der Kommandozeile starten mit aufgegriffen wird. Ist zwar ein wenig aufwenidger aber dafür weisst du hinterher garantiert, wie der Hase läuft :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Am besten liest du dir ein Java Beginner Tutorial durch, in dem auch das Thema JARs, Classpath und Programme von der Kommandozeile starten mit aufgegriffen wird. Ist zwar ein wenig aufwenidger aber dafür weisst du hinterher garantiert, wie der Hase läuft :)

Danke perdi, genau mit dieser Antwort habe ich von Dir gerechnet :D

Welches Tut ist dafür am besten? Das von Sun.

Ich schlag mich mit dem M#+? schon Jahre rum und habe es immer wieder aufgeschoben es wirklich zu lernen. Dann muss ich wohl doch mal ran.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Danke, ich hab's. Weitergeholfen hat mir das hier:

http://java.sun.com/docs/books/tutorial/jar/manifest/downman.html

Dazu muss das benötigte Package mit im selben Verzeichnis liegen, wie das eigene. Natürlich ist es auch möglich ein beliebiges Unterverzeichnis anzugeben, wenn man es richtig in die Manifest-Datei einträgt. Danke für Eure Hilfe.

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 1 Jahr später...

Ich schon wieder.

Wie oben bereits beschrieben habe ich es geschafft, ein externes package mit in den Class-Path einzubinden.

Nun stehe ich allerdings vor einem neuen Problem.

Ich habe folgenden Fall:

root

 - MeineAnwendung.jar

 - [drivers]

   - mysql-connector-java-5.0.3-bin.jar

Momentan ist es so gelöst, das der Treiber mysql-connector-java-5.0.3-bin.jar im Manifest in den Class-path eingetragen ist.

Ich würde aber gerne eine Möglichkeit finden, dass der komplette Ordner [drivers] in den Class-path übernommen, so dass ich die treiber jederzeit austauschen oder erweitern kann, ohne eine neue Manifest-Datei bilden zu müssen und somit den Class-Path neu anzugeben.

Ich habe es mit folgenden Eintragungen in der Manifest-Datei versucht:

1. Class-Path: drivers/

2. Class-Path: drivers/*.jar

Beide Möglichkeiten funktionieren wohl nicht.

Für einen Ratschlag wäre ich dankbar.

Gruß

Markus

Link zu diesem Kommentar
Auf anderen Seiten teilen

ich hab ne kleine batch datei zum erstellen für das ganze geschrieben. bei mir hats auch nicht so geklappt, wies auf diversen internet seiten steht!

du müsstest sie nur bearbeiten und den pfad deines jdk\bin\ eingeben,

da ich noch nicht viel ahnung hab wie man dieses über dos finden kann (irgendwie über den dir befehl bestimmt). und dadurch, dass ich sie eigentlich nur für meinen pc gemacht habe, ist der pfad der da steht halt mein pfad.

entpacken kannst du es überall hin.

nur danach musst du die manifest vorlage einfach in deinen projekt ordner reinkopieren.

Jar Ersteller mit Manifest Vorlage.rar

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich würde aber gerne eine Möglichkeit finden, dass der komplette Ordner [drivers] in den Class-path übernommen, so dass ich die treiber jederzeit austauschen oder erweitern kann, ohne eine neue Manifest-Datei bilden zu müssen und somit den Class-Path neu anzugeben.
Ohne einen eigenen ClassLoader zu verwenden: Nicht möglich.
Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...