# Batch / Shell-Skript in Jar.Datei einbinden?



## Rames (14. Sep 2012)

Hi,
Im Studium haben ich Programm entwickelt, das einige mathematische Algorithmen und Funktionen abbildet bzw. ausführen kann. Neben einfachen Grundrechenarten habe ich hier u.A. eine simple Form der Bruchrechnung, einfache Matrix-Verarbeitung und einen Simplex-Optimierungsalgorithmus implementiert. Alles funktioniert auch soweit.

Mein Problem ist jetzt das Folgende: heute war Zwischenpräsentation meiner Arbeit. Der Prof. war auch sehr zufrieden mit den Algorithmen. Sein einziger Kritikpunkt war, dass das Programm für den Endanwender selbst mit drei Dateien daherkommt - nämlich

core.jar
startLinux.sh
startWindows.bat

Seiner Meinung nach, hat das Programm letzlich dem Endanwender nur eine einzige Datei zu bieten. Das Programm soll auch via Draufklicken zu starten sein - also nicht nur über Konsole / Terminal. Gleichzeitig soll es sowohl unter Windows (Xp, Vista und 7), als auch unter Linux (Ubuntu ab 10.04.) funktionieren.

Zwar weiß ich, wie ich in Java auslesen kann, welches Betriebssystem auf dem Rechner wohnt, jedoch komme ich nicht weiter mit dem öffnen per klick.
Könnt Ihr mir da helfen?

Ein- und Ausgabe erfolgt in aktueller Version nur in Konsole / Terminal - grafische Oberfläche ist für das nächste Semester geplant. Folglich ist meines Wissens ein Start über shell-Skript / batch-Skript notwendig, um dem User die Eingabe von
"java -jar core.jar" zu ersparen. Letzlich steht in den Skript-Dateien natürlich lediglich genau dieser Befehl.

Lösungskonzept
Mein aktuelles Konzept sieht vor, alle drei Dateien in eine simplex.jar einzubinden. Diese soll nur eine weitere Klasse enthalten, in welcher geprüft wird, ob es sich um ein Linux- oder um ein Windowsbetriebssystem handelt. Mit Hilfe einer einfach If-Condition soll entsprechend des Betriebssystems aus die entsprechende Skript-Datei ausgeführt werden

Fragen

Wie schaffe ich es, dass eine jar-Datein direkt per Doppelklick ausführbar ist?

Wie binde ich die Windows-Konsole und das Linux-Terminal und zusätzlich die beiden Skript-Dateien in die JVM ein?
_Ich stelle mir das so vor: die Konsole / das Terminal wird aus Java heraus geöffnet und kann zudem den Befehl java -jar core.jar verarbeiten._

Mfg
Rames


----------



## freez (14. Sep 2012)

Du kannst dein Programm als Runnable Jar aus jeder gängigen Entwicklungsumgebung exportieren. In Eclipse exportierst du einfach als Runnable Jar und gibst deine Main Class an. Damit kannst du die Jar per Doppelklick starten.

Dein Lösungsansatz sollte damit überflüssig werden.


----------



## Rames (14. Sep 2012)

Hallo,
Ich habe gerade mal geschaut, aber offenbar hat mich meine Erinnerung nicht getrogen.

Wenn ich unter Eclipse die Option "runnable Jar" auswähle, dann findet Eclipse keine Launch Configuration.
Offenbar akzeptiert es die einfache main(String[] args) nicht als solche.

Irgendwie hatte ich bei reinen Konsolenprogrammen noch im Kopf, dass ich da schon mal solche Probleme mit hatte. Daher war ich den Weg gegangen, mir die Skripts zu schreiben, die dann einfach nur diesen simplen Befehl ausführen.

Oder mache ich gerade einfach nur was glorreich falsch?

Liebe Gruß

Edit: Die main() wird auch ansonsten korrekt erkannt, da ich eine normale .jar erzeugen kann.


----------



## Michael... (14. Sep 2012)

Rames hat gesagt.:


> Seiner Meinung nach, hat das Programm letzlich dem Endanwender nur eine einzige Datei zu bieten.


meiner Meinung: Bull....

Der Anwender kann ja je nach System entweder die bat oder shell per Doppelklick starten und die startet das Java Programm.

Ein Runnable Jar nutzt bei einer "Konsolenanwendung" wenig. Sowas ist nur für GUI Applikationen gedacht, da diese "runnable" jars überlicher Weise mit javaw und somit ohne cmd oder shell gestartet werden.


----------



## freez (14. Sep 2012)

Michael... hat gesagt.:


> meiner Meinung: Bull....



Geht mir ebenfalls so, aber ich denke der Prof hat da wohl andere Hintergedanken. In der Realität könnte ich da auch mehrere Klassen mit "main" haben, die unterschiedliche Dinge erledigen (JavaWord / JavaExcel / JavaAccess). Da brauche ich mehrere Starter. Außerdem bietest du in der Wirklichkeit auch für das Betriebsystem spezifische Downloads / Installationen an, die dir das richtige Script im Startmenü verlinken. Die Plattformunabhängigkeit von Java hört nämlich da auf, wo es um die saubere Einbindung des Programmes in den Desktop des Users geht (Links auf Desktop / Startleiste, Aufrufscripte usw.).

Externe jars z.B. lege ich in der Regel auch separat bei, schon allein um sie auch einzeln updaten zu können. Da kommen auch mal schnell 50 - 100 Jars zusammen. Da zieht das Argument einfach nicht. Außerdem: schau mal in deinen Programm Files Ordner. Welches Programm hat hier nur eine einzige Datei drin liegen?

Aber ich denke er wollte dir nur noch einen Anreiz geben. Wenn das das einzigste Problem war ... dann Glückwunsch ... hast ein super Programm für deinen Prof geschrieben.


----------



## mla.rue (17. Sep 2012)

Michael... hat gesagt.:


> meiner Meinung: Bull....
> 
> [...]



War auch mein erster Gedanke.

Was aber geht: Jar als runnable Jar compilieren und die erste Anweisung wäre eine Konsole zu starten (in der werden dann deine Berechnung eh gemacht), abfragen msst dann das OS und entsprechend den richtigen Befehl ausführen


----------

