Clanintern Clanintern Clanintern

Forum

Öffentliche Foren
FORUM: Spiele & Computer THEMA: java 2 exe
AUTOR BEITRAG
DoomTheBrain

RANG Skill Commander

#1 - 31.05 23:45

jaaa habe ein bisschen ein grösseres projekt fertiggestellt und wollte nun wissen ob man das ganze irgendwie in eine exe packen kann damit es auch auf pcs ohne vm ausgef¨hrt werden kann.... habe mal bisschen gegoogelt aber scheint relativ kompliziert zu sein und vor allem scheinen auch die meinungen auseinder zu gehen ob so etwas überhaupt möglich ist..

hätte da gerne mal eine kompetente antwort dazu

greets doom
SirLant

RANG Deckschrubber

#2 - 01.06 11:07

Das nützt dir nichts weil so ein Tool würde auch nicht mehr tun als die jvm+dein Programm in eine EXE packen.
Da kannst du gleich die JVM mit ausliefern und dein Programm in eine .jar packen.

Und wenn du dem Anwender bei der Installation eine Verknüpfung anlegst spielt es eh keine Rolle ob da nun ne .jar oder ne .exe dahinter steckt.
DoomTheBrain

RANG Skill Commander

#3 - 01.06 11:18

ja aber bisschen einfacher für einen dummen anwender wäre es ja schon wenn die jvm gleich in der exe mit dabei ist.. und ein andere problem habe ich auch... wenn ich meine jar dooppelklicke kommt...

failed to load main-class manifest atrribute from und nacher der pfad zur jar
Morath

RANG Deckschrubber

#4 - 01.06 12:45

Du darfst die java VM afaik nicht so einfach zu einem eignen Programm dazupacken und zusammen ausliefern. Details müsste man im Lizenzvertrag zur JRE nachlesen, dazu fehlt mir aber leider im Moment die Zeit.

Ein ausführbares Programm in native code (unter Windows: eine .exe Oo) kann z.B. das eclipse RCP-Framework für erstellen (es gibt ja eine auch eclipse.exe für die Entwicklungsumgebung), die ist dann aber trotzdem noch abhängig davon, dass eine JRE auf dem System installiert ist.
DoomTheBrain

RANG Skill Commander

#5 - 01.06 13:12

ja ok ich will das nicht gross ausliefern sondern nur paar kollegen oder sowas geben.drum ist das mit dem lizenzvertrag ja praktishc gesehen eher nicht so dass problem . . und da sind ziemlich dumme leute dabei... für die will ichs so haben dass die einfach möglichst wenig machen müssen um das ding zu starten
Morath

RANG Deckschrubber

#6 - 01.06 13:43

Na gut, dann kann ich dir mal nen Vorschlag bieten, der auf meinem bescheidenen Wissen basiert - gut möglich, dass es auch einfacher geht ;)

- Pack deine Anwendung zu einem .jar zusammen und setze im Manifest eine Main Class (für genauere Anleitung bitte nachfragen oder in diesem anderen Thread gucken in dem ichs mal ausführlich geschrieben hatte)
- Stell das .jar in ein Verzeichnis, und kopier die komplette JRE in ein Unterverzeichnis
- Erstelle ein commandskript mit dem Aufruf "jre\bin\java.exe -jar <jarname>"
- Das komplette Verzeichnis gibts du dann an deine Kollegen, die die Anwendung mit Doppelklick auf das .cmd starten können
DoomTheBrain

RANG Skill Commander

#7 - 01.06 13:46

ook dann werde ich das mal versuchen zu machen....

die komplette jre findet man im java ordner auf der festplatte oder? z.b. jre1.6.0_01 könnte der richtige ordner sein?

und ja ich schaue mal ob ich begreife wie ich das mit dem manifest machen muss

daaanke
DoomTheBrain

RANG Skill Commander

#8 - 01.06 13:55

ok im manifest file steht nur

Manifest-Version: 1.0

jetzt habe ich die zeile direkt unterhalb eingefügt und das file wieder ins jar archiv gepackt:

Manifest-Version: 1.0
Main-Class: src.Testdriver.java

trotzdem funktioniert das alles noch nicht... was ist da falsch?

src ist eins von vielen package im projekt
Morath

RANG Deckschrubber

#9 - 01.06 13:59

genau, das komplette jre-Verzeichnis ist das, unter dem es ein Verzeichnis namens "bin" gibt, in dem die "java.exe" liegt :-)

Zum Manifest:

Main-Class: ... is schon richtig, aber du musst dort einen vollqualifizierten Klassennamen angeben, also genau so wie wenn du die Anwendung mit java.exe direkt starten willst.
Angenommen die Klasse "Testdriver" liegt im package "de.clanintern.test", dann muss der Manifesteintrag so aussehen:

code:
Main-Class: de.clanintern.test.Testdriver


Liegt die Klasse im default-Package (also ohne einem "package"-Statement in der ersten Zeile der .java-Datei), dann schauts so aus:

code:
Main-Class: Testdriver
DoomTheBrain

RANG Skill Commander

#10 - 01.06 14:07

hmm das habe ich irgendwie so gemacht... so sieht das projekt aus:

[img]http://member.powersurf.li/mueller/package.gif[/img]

und dann müsste der eintrag doch lauten:

code:

Main-Class: src.Tesdriver


aber vielleicht liegts auch am jar file erstellen... welche optionen muss ich denn da auswählen??

[img]http://member.powersurf.li/mueller/export.gif[/img]

danke
Morath

RANG Deckschrubber

#11 - 01.06 14:26

ach so, src is schon ein package, ja dann müsste das eigentlich so stimmen, wie du in #10 geschrieben hast.

Das Exportieren sieht auch gut aus, wobei du die eclipse-sezifischen Dateien .classpath, .project und .umlproject gar nicht mit zu exportieren brauchst.

Was bringt denn die java-VM für ne Fehlermeldung wenn du das .jar mal von Hand mit "java -jar MotPG.jar" aufrufst?


Ich mach jetzt mal Feierabend, werd aber heute abend nochmal reingucken. Viel Erfolg noch! :)
DoomTheBrain

RANG Skill Commander

#12 - 01.06 14:33

dann startet zwar das programm aber es gibt folgende fehlermeldungen

[img]http://member.powersurf.li/mueller/fehler.gif[/img]

diese meldungen kommen aber beim normalen starten mt dem programm nicht... denke mal das ist weil er bestimmte libaries oderso nicht mehr findet :S
Morath

RANG Deckschrubber

#13 - 01.06 15:49

oh, das sieht fast so aus.

Welche libs hast du denn in eclipse mit im classpath/buildpath drin?

Diese zusätzlichen jarfiles müsstest du dann noch ins gleiche Verzeichnis wie dein selber gebautes jar legen und im Manifest noch einen Eintrag aufnehmen:

code:
Class-Path: jar1.jar jar2.jar ...
DoomTheBrain

RANG Skill Commander

#14 - 01.06 15:59

der classpath sieht so aus

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path=""/>
<classpathentry exported="true" kind="lib" path="C:/Programme/Java/junit4.3.1/junit-4.3.1.jar"/>
<classpathentry kind="lib" path="lib/jl1.0.jar"/>
<classpathentry kind="lib" path="lib/tritonus_share-0.3.6.jar"/>
<classpathentry kind="lib" path="lib/mp3sp.1.6.jar"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="output" path=""/>
</classpath>


ich denke mal dann muss das noch in das verzeichnis

<classpathentry kind="lib" path="lib/jl1.0.jar"/>
<classpathentry kind="lib" path="lib/tritonus_share-0.3.6.jar"/>
<classpathentry kind="lib" path="lib/mp3sp.1.6.jar"/>

danke für deine geduld
Morath

RANG Deckschrubber

#15 - 01.06 16:00

ja genau, die drei jars kopierst da mit rein und setzt die drei Namen dann in diesen Class-Path Eintrag im Manifest und schon müsste es laufen :)
DoomTheBrain

RANG Skill Commander

#16 - 01.06 16:08

hmm das manifest sieht jetzt so aus:

Manifest-Version: 1.0
Main-Class: src.TestDriver
Classpath: jl1.0.jar mp3sp.jar tritonus_share-0.3.6.jar

aber trotzdem kommt noch diese fehlermeldung

[img]http://member.powersurf.li/mueller/fehler2.gif[/img]


allerdings wird das programm auch gestartet und geht dann einfach nicht mehr weiter wenn auf diese ressourcen zugegriffen wird
Morath

RANG Deckschrubber

#17 - 04.06 10:56

also meines Wissens nach muss der eintrag im Manifest "Class-Path" geschrieben werden, also mit Bindestrich, so wie auch in #13.

Falls es daran aber nicht liegt, dann bin ich im Moment auch eher ratlos, sorry :-(
DoomTheBrain

RANG Lord of Luck

#18 - 04.06 11:34

ja easy.. habe jetzt heute auch noch andere leute von der uni gefragt und die sind irgendwie auch alle ratlos

keine ahnung woran das liegt