# Java-Programm mittels Shell-Skript aufrufen



## KlausPetersen (30. Okt 2007)

Hallo,
ich habe mir unter BSD (FreeBSD) ein kleines Java-Prog. geschrieben, welches ich gerne im bin-Ordner habe so das ich es direkt aufrufen kann.

Sprich:
Ich bin in irgend einem Ordner und möchte nun "meinProg datei.txt" mittels Shell aufrufen.

Dies geht ja leider nicht, sondern ich muss ja 'java meinProg' aufrufen und dann auch noch in dem Ordner sein indem sich 'meinProg.class' befindet.
Deswegen dachte ich mir, schreibe ich einen kleinen Shell Skript, den ich auch mit in bin abspeichere, und diesen dann sage, er soll 'java meinProg $*' aufrufen.
Wenn ich im bin Ordner mich befinde, klappt der Aufruf von meinProg.sh problemlos.
Befinde ich mich aber irgendwo anders im Dateisystem, meckert java rum, dass er die Klasse 'meinProg' nicht finden kann.

Was ist nun die eleganteste Methode dieses zu lösen?

Ich will irgendwo im Dateisystem 'meinProg eineDatei.txt' per Shell aufrufen und mein Java Programm soll gestartet werden.
Sollte man dies mittels Shell Script machen, oder gibts da eine andere bessere Lösung?
Wie müsste der Shell Script aussehen, bzw. andere Frage, kann ich irgendwie sagen, dass die Main Methode aus .../meinProg.class gestart werden soll?

Paar Infos noch dazu:
Der Shell Script soll auch funktionieren, wenn man ihn in ein anderen Ordner verschiebt, eine feste Pfadangabe ist problematisch.


*Andere Frage:*
Ich habe versucht meinProg.class in eine Jar Datei zu packen:
jar -cvf meinProg.jar meinProg.class

Dann aufrufen:
java -jar meinProg.jar

führt zu:
Failed to load Main-Class manifest attribute from
drucken.jar


meinProg.class kann ich aber ganz normal ausführen.
Wodran liegt das?


Hoffentlich weiß jmd. weiter, bin langsam am verzweifeln


----------



## Wildcard (30. Okt 2007)

KlausPetersen hat gesagt.:
			
		

> Was ist nun die eleganteste Methode dieses zu lösen?


Das jar File war schon dir richtige Idee, aber an der Umsetzung ist es wohl gescheitert.
Wenn du nicht genau weißt wie die Manifest.mf aussehen muss, dann würde ich dir eine IDE wie Eclipse empfehlen.
Export as -> jar und im Wizard die main-class angeben


----------



## fehlerfinder (31. Okt 2007)

KlausPetersen hat gesagt.:
			
		

> Dies geht ja leider nicht, sondern ich muss ja 'java meinProg' aufrufen und dann auch noch in dem Ordner sein indem sich 'meinProg.class' befindet.


Jo - dann gehst du einfach mit "cd der_ordner_in_dem_sich_meinprog_befindet" in eben diesen Ordner bevor du dein "java..." aufrufst.



> Was ist nun die eleganteste Methode dieses zu lösen?


"elegant" ist das allerdings nicht - zumindest nicht auf Java-Ebene. Da macht eine jar-Datei (wie Wildcard schon anmerkte) eindeutig die bessere Figur.


----------



## KlausPetersen (1. Nov 2007)

Hallo,
danke, habs hinbekommen.

Hier mein Code:

Mein Manifest:
Manifest-Version: 1.0
Main-Class: meinProg

Dann daraus eine jar-Datei gemacht (meinProg.jar) und diese zusammen mit folgendem bash Script in den bin Ordner verschoben:

```
#!/bin/bash
DIR=`dirname $0`
java -jar $DIR/meinProg.jar $*
```


Klappt wunderbar.


----------

