Plattformunabhänginge Ausführung einer .jar Datei

Hugo811

Neues Mitglied
Hallo Forenmitglieder,

Ich hab da ein spezielles Problem.
Ich musste ein Kommandozeilenapplikation schreiben. Diese hab ich dann als .jar exportiert und wird per ANT deployed.

Das Problem liegt in der Schnittstelle eines anderen Programmes.
Das andere Programm kann andere ".exe" Dateien aufrufen und ausführen lassen und nimmt den StatusCode an und vergleicht diesen gegen einen bestimmten Wert, den man konfigurieren kann.

Dieses andere Programm ist nicht in der Lage ".jar" Dateien auszuführen (mangelhaft Programmiert).
Es erkennt die Kommandozeilenargumente die vor dem .exe Pfad kommen nicht an. (java -jar ...)

Meine Idee lag darin die .jar einfach durch eine .bat über dieses besagt Programm aufrufen zu lassen und den StatusCode der .jar über die .bat zurückzugeben. Das funktioniert natürlich.

Problem ist, dass das ganze auch unter Linux funktionieren muss. Soweit ich weiß gibt es keinen .bat interpreter unter einem Linux.

Ich darf auch weder Cygwin o.ä., noch Python Runtime auf dem Rechner installieren.

Konkret suche ich nach einer Lösung ein einziges Skript zu schreiben, dass sowohl unter Linux als auch Windows interpretiert werden kann auch wenn dieses Skript erst zur Laufzeit erzeugt werden muss mit >> z.B..

Ich weiß noch nicht ob das überhaupt möglich ist und möchte an der Stelle sagen :
"Windows batch = fail!"

Danke

Gruß
 
Skript-Dateien gibt es natürlich auch unter Linux. Da darf die Endung
auch .bat, oder .cmd sein. Wichtig ist nur, dass der Datei das Recht
zum Ausführen mitgegeben wird. Das geht mit der Anweisung "chmod".

So gesehen könnte das funktionieren, da der Aufruf des Java-Interpreters,
so weit ich weiß, in beiden Systemen gleich ist. Probleme gibt es erst bei
System-spezifischen Anweisungen oder Pfad-Angaben.

Ich hoffe, das hilft Dir weiter.

VG ROlf
 
Das tönt für mich so ähnlich wie: "Ich schreibe jetzt ein Programm, dass sowohl von einem C++Komplier wie auch von Java verarbeitet werden können muss."
Windows und Linux haben komplett unteschiedliche Vorstellungen von Scripts, aber falls man das in einem Script unterscheiden kann, wäre ich sehr daran interessiert zu erfahren wie das geht.

Ich würde vorschlagen dass du zwei Scripts erstellst und beide heissen xxx.bat, haben aber BS-spezifischen Inhalt und da dafür sorgst, dass jeweils das entsprechende da hinkommt wo es hingehört. (Linux ist es egal wenn .xyz am Ende steht)

oder:

Die Scripts haben unterschiedliche Namen und du fragst im aufrufenden Programm ab auf welchem BS es läuft (geht sicher aber frag mich nicht wie 😳) und rufst dann das entsprechende Script auf.
 
Windows und Linux haben komplett unteschiedliche Vorstellungen von Scripts, aber falls man das in einem Script unterscheiden kann, wäre ich sehr daran interessiert zu erfahren wie das geht.

Da muss man halt mal etwas kreativ sein und probieren. ;-)
Es gibt Übereinstimmungen und Differenzen und man kann beides nutzen.

Ein Beispiel:

Legt man in einem Verzeichnis die folgenden 3 Dateien an und versieht sie unter Linux/Unix per chmod mit der Berechtigung Ausführen,
wird unter Linux die Datei test und unter Windows die Datei test.bat ausgeführt. Grund ist, dass Windows einfach ausgedrückt
automatisch nach passenden Dateien mit der Endung (.com, .exe, .bat, .cmd) sucht und dann diese ausführt.

Datei go.bat
Code:
@ECHO OFF
./test

Datei test
Code:
echo Ich bin Unix

Datei test.bat
Code:
echo Ich bin Windows

Getestet auf meinem Mac und einem Windows 7 PC.

BTW: "./" als Pfadangabe vor dem Dateinamen führt zwar auf der Kommandozeile
zu einem Fehler (Datei nicht gefunden), funktioniert aber in einem Skript. ;-)


VG ROlf
 
Ein Script das einen Fehler verursacht - igitt - da sträuben sich mir alle Haare. (Ok, ich bin auch einer, der keine Warnungen im Eclipse sehen will.) lass das go.bat doch einfach weg, das aufrufende Programm hat doch locker die Möglichkeit nach BS zu unterscheiden und das richtige Script zu starten oder eben - du kopierst nur das hin, was da hingehört!

By the way : Warum muss es überhautp ein Script sein?
 
Sorry, aber ich hab nirgendwo angemerkt, dass mein Skript einen Fehler verursacht. ;-)


Zudem schrieb Hugo811:
...

Das Problem liegt in der Schnittstelle eines anderen Programmes.
Das andere Programm kann andere ".exe" Dateien aufrufen und ausführen lassen und nimmt den
StatusCode an und vergleicht diesen gegen einen bestimmten Wert, den man konfigurieren kann.

Dieses andere Programm ist nicht in der Lage ".jar" Dateien auszuführen (mangelhaft Programmiert).
Es erkennt die Kommandozeilenargumente die vor dem .exe Pfad kommen nicht an. (java -jar ...)

...

Daraus entnehme ich, dass er keinen Einfluß auf das aufrufende Programm hat,
sondern nur dessen vorhandene Schnittstelle für den Aufruf seines Programms
nutzen kann. Daher kann er dem Aufrufer auch nicht beibringen, zwischen den OS
zu unterscheiden.

Aber nichts für Ungut.
Zumal mir die ganze Aufgabenstellung sowieso noch etwas suspekt ist.
Das aufrufende Programm läuft doch entweder unter Window - wo es sicher nur
Windows-Programme starten wird - oder unter Linux, wo Linux-Anwendungen
gestartet werden. Beides ist doch eher unwahrscheinlich. Und wenn von einem
Windows-Programm ein weiteres unter Linux gestartet werden soll, geht das eh
nicht einfach so über ein Skript. Vielleicht fehlen aber auch nur ein paar
Hintergrundinformationen. ;-)


VG und eine schönes WE,
ROlf
 
...Das Problem liegt in der Schnittstelle eines anderen Programmes.
Das andere Programm kann andere ".exe" Dateien aufrufen und ausführen lassen und nimmt den StatusCode an und vergleicht diesen gegen einen bestimmten Wert, den man konfigurieren kann.

Dieses andere Programm ist nicht in der Lage ".jar" Dateien auszuführen (mangelhaft Programmiert).
Es erkennt die Kommandozeilenargumente die vor dem .exe Pfad kommen nicht an. (java -jar ...)

Die ausgeführte exe heisst "java" ( vermutlich genaugenommen java.exe ), alles andere sind nur Zusatzparameter. Falls deine "mangelhaft Programmierte" Umgebung beliebig viele Start-Parameter zulässt, sehe ich das Problem nicht.


Im übrigen Danke an r.w. für seinen Vorschlag der plattformunabhängigen .bat Datei. Nicht zielführend, aber eine sehr hübsche Idee :lol:
 
Im übrigen Danke an r.w. für seinen Vorschlag der plattformunabhängigen .bat Datei. Nicht zielführend, aber eine sehr hübsche Idee :lol:

Nicht zielführend? Vielleicht in diesem Fall, aber es ist eine funktionierende Skriptweiche,
die man auf der Linux-Konsole genauso aufrufen kann, wie von einem Netzwerk-PC
unter Windows über eine Samba-Freigabe. Getestet! ;-)


Dieses andere Programm ist nicht in der Lage ".jar" Dateien auszuführen (mangelhaft Programmiert).
Es erkennt die Kommandozeilenargumente die vor dem .exe Pfad kommen nicht an. (java -jar ...)
<-
Die ausgeführte exe heisst "java" ( vermutlich genaugenommen java.exe ), alles andere sind nur Zusatzparameter. Falls deine "mangelhaft Programmierte" Umgebung beliebig viele Start-Parameter zulässt, sehe ich das Problem nicht.

:lol:
 
Wenn ich dein Problem mal zusammenfassen darf: Du möchtest eine Software entwickeln und auf unterschiedlichen Betriebssystemen laufen lassen. Du suchst eine Möglichkeit, wie du mit wenig Aufwand dies bewerkstelligst.
Glückwunsch ... du bist bei Java schon genau richtig, weil sie auf fast jedem Computer der Welt laufen kann 🙂.
An irgendeiner Stelle musst du aber einen betriebssystemspezifischen Aufruf sicherstellen. Das ist nun der sehr sehr sehr kleine Aufwand (gemessen an der Software, die extra für ein Betriebssystem kompiliert wird), den man noch damit hat.

Schreibe ein Script extra für jedes Betriebssystem, was du unterstützen willst. Irgendwann kommt man nunmal auf dem Betriebssystem an.
 

Zurück
Oben