Executable in Jar einbinden

Status
Nicht offen für weitere Antworten.

carsten123

Mitglied
Hallo,

ich rufe aus Java heraus ein externes Programm auf. Das klappt auch soweit.

Nun soll aber dieses Executable mit in das Jar-File gepackt werden. Es soll also von außen nicht mehr sichtbar sein. Es einfach mit hinzufügen ist ja einfach. Aber wie spreche ich es dann an? Gibt es da irgendwie einen relativen Pfad oder sowas?

Kann man das Problem eventuell anders lösen? Das externe Programm (z.B. ein Batchjob oder ein fertig Compiliertes C-Programm) soll nur in der Jar-Datei vorhanden sein. Es soll auch möglichst nicht vor dem Ausführen an eine andere Stelle auf dem Rechner kopiert werden.

Kann mir da jemand einen Tipp geben wie es funktionieren könnte?

Vielen Dank im Vorraus

Tschau

carsten
 
Zuletzt bearbeitet:

MarcB

Bekanntes Mitglied
Meines Wissens geht das nicht.

Man müsste die Datei die im Jar liegt immer temporär rausschreiben. Das könnte in etwa so gehen:

Code:
InputStream in = getClass().getResourceAsStream("<Pfad zu der Datei im Jar>");
File tempFile = File.createTempFile("<name der datei>", "<endung>");
OutputStream out = new FileOutputStream(tempFile);

byte[] bytes = new byte[1024];
        int read;
        try{
            while((read=in.read(bytes))!= -1)
                out.write(bytes, 0, read);
        }finally{
                in.close();
                out.close();
}
}

String s = tempFile.getAbsolutePath();
Process p = Runtime.getRuntime().exec(s);

(nicht getestet, nur im Browser getippt)

Sonderlich performant wird es auf jeden Fall nicht. ;)
 

carsten123

Mitglied
dankeschön @MarcB

mmmhhhhh okay

das klingt nicht so toll.
Das mit dem temporären Rausschreiben hab ich mir auch schon überlegt. Aber das ist ja unperformant hoch 3. Es würde ja nur Sinn machen wenn das Jar-Archiv auch gepackt wäre und man beim Rauskopieren gleich mit entpacken könnte. Können Jar-Archive denn gepackt und immer noch ausführbar sein?

Anderer Lösungsansatz:
Angenommen ich habe den C-Quellcode der Executables. Könnte ich diese dann mittels Java Native Interface einbinden und ausführen? Wie sieht es hier mit der Performance aus? Ich habe C und Fortran Programme, die Berechnungen durchführen. Eine solche Berechnung dauert mehrere Minuten bis Stunden. Es dürfte als möglichst zu keinem Geschwindigkeitsverlust führen.

Wie schaut es beim Java Native Interface mit dem Reverse-Engineering aus? Das vorhandene C-Code so auf jeden Fall unbekannt bleiben. Bei Java-Bytecode ist das ja so eine Sache.

Ich hoffe auch hierzu kann jemand was sagen. ;)

Vielen Dank schon mal
 

Wildcard

Top Contributor
dankeschön @MarcB

mmmhhhhh okay

das klingt nicht so toll.
Das mit dem temporären Rausschreiben hab ich mir auch schon überlegt. Aber das ist ja unperformant hoch 3. Es würde ja nur Sinn machen wenn das Jar-Archiv auch gepackt wäre und man beim Rauskopieren gleich mit entpacken könnte. Können Jar-Archive denn gepackt und immer noch ausführbar sein?

Anderer Lösungsansatz:
Angenommen ich habe den C-Quellcode der Executables. Könnte ich diese dann mittels Java Native Interface einbinden und ausführen? Wie sieht es hier mit der Performance aus? Ich habe C und Fortran Programme, die Berechnungen durchführen. Eine solche Berechnung dauert mehrere Minuten bis Stunden. Es dürfte als möglichst zu keinem Geschwindigkeitsverlust führen.
-Ja, jars können gepackt und gleichzeitig ausführbar sein.
-Du sagst deine Berechnung dauert lange. Über JNI ist der Zugriff natürlich (etwas) langsamer als direkt, aber wenn die Berechnung lange dauert, sind die 0,0001% der Rechenzeit, die das triggern der Rechnung ausmacht, doch völlig irrelevant.
-Ist doch lächerlich sich darüber Gedanken zu machen ob das kopieren einer kleinen Binärdatei langsam ist, wenn die Berechnung die man damit anstellt Minuten bis Stunden dauert.


Wie schaut es beim Java Native Interface mit dem Reverse-Engineering aus? Das vorhandene C-Code so auf jeden Fall unbekannt bleiben. Bei Java-Bytecode ist das ja so eine Sache.
Du kannst auch aus Java Bytecode den Quellcode nicht mehr herstellen, allerdings einen Quellcode der mehr "Sinn" macht als bei zB einem C Kompilat.
Die Frage verstehe ich sowieso nicht, wenn du JNI verwendest, sprichst du "direkt" mit deinem C Kompilat. Wenn das C Kompilat dafür im bytecode vorliegen müsste, wofür bräuchte man dann JNI?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Executable JAR geht nicht mehr... Tools - Maven, Gradle, Ant & mehr 2
D [Maven]wie bekommt man separat ausführbare (executable jar) tests Tools - Maven, Gradle, Ant & mehr 4
S m2eclipse und executable jars. Tools - Maven, Gradle, Ant & mehr 2
T Maven: Probleme beim Einbinden der Dependencies Tools - Maven, Gradle, Ant & mehr 9
L Gradle Ein lokales Eclipse Projekt in Gradle dependency einbinden Tools - Maven, Gradle, Ant & mehr 2
yakazuqi Maven Eigene API mit Maven einbinden Tools - Maven, Gradle, Ant & mehr 1
H Maven Dependencies in runnable Jar einbinden Tools - Maven, Gradle, Ant & mehr 16
pkm Wie log4j in einem mvn-basierten Projekt einbinden? Tools - Maven, Gradle, Ant & mehr 2
X Maven Dependencies beim install mit in die Jar einbinden Tools - Maven, Gradle, Ant & mehr 6
S JAX-RS Klasse aus anderen Projekt einbinden Tools - Maven, Gradle, Ant & mehr 0
H Maven HSQLDB in den Maven lifecycle einbinden Tools - Maven, Gradle, Ant & mehr 5
N Webservice Einbinden einer WSDL Tools - Maven, Gradle, Ant & mehr 11
D Jar Datei in HTML einbinden Tools - Maven, Gradle, Ant & mehr 3
K Applet als Jar-Datei in HTML einbinden Tools - Maven, Gradle, Ant & mehr 14
Miness Externe Library in Jar einbinden Tools - Maven, Gradle, Ant & mehr 8
X Maven Abhängigkeiten in die jar einbinden Tools - Maven, Gradle, Ant & mehr 10
F Applet Application in PHP einbinden? Tools - Maven, Gradle, Ant & mehr 5
M Java3D in Eclipse einbinden Tools - Maven, Gradle, Ant & mehr 4
D [maven] dll-resource einbinden - library.path setzen Tools - Maven, Gradle, Ant & mehr 4
A Applet Applet startet nach Einbinden auf Website nicht Tools - Maven, Gradle, Ant & mehr 4
H Java Applet Problem beim einbinden in HTML Tools - Maven, Gradle, Ant & mehr 3
nabla Einbinden von externen Java und C Bibliotheken Tools - Maven, Gradle, Ant & mehr 5
reibi Maven : Resourcen NICHT mit einbinden beim Builden Tools - Maven, Gradle, Ant & mehr 10
ruutaiokwu manifest.mf - wie libraries einbinden? Tools - Maven, Gradle, Ant & mehr 7
D Bestehendes Projekt in Eclipse einbinden Tools - Maven, Gradle, Ant & mehr 6
ARadauer jar mit maven einbinden Tools - Maven, Gradle, Ant & mehr 10
B Applet (Class-Datei(en)) in Html-Seite einbinden - Clipboard Tools - Maven, Gradle, Ant & mehr 13
G Applet in Jar-Format einbinden? Tools - Maven, Gradle, Ant & mehr 2
zilti Applet einbinden: Problem Tools - Maven, Gradle, Ant & mehr 6
A Hilfe! Java Applet Lake von Anfy - wie in HP einbinden? Tools - Maven, Gradle, Ant & mehr 25
S Applet in Jar umwandeln und dann auf eine Website einbinden Tools - Maven, Gradle, Ant & mehr 6
G Externes .jar in Java Applet einbinden Tools - Maven, Gradle, Ant & mehr 2
G Applet einbinden - was ist falsch? Tools - Maven, Gradle, Ant & mehr 3
G Pop up ins applet einbinden Tools - Maven, Gradle, Ant & mehr 7
G video in applet einbinden Tools - Maven, Gradle, Ant & mehr 2
D Problem beim einbinden von jar und class datei Tools - Maven, Gradle, Ant & mehr 8
E applet in browser einbinden Tools - Maven, Gradle, Ant & mehr 3
K Icons einbinden Tools - Maven, Gradle, Ant & mehr 6
T Java Applets dynamisch einbinden Tools - Maven, Gradle, Ant & mehr 5
M Applet in HTML-Datei einbinden Tools - Maven, Gradle, Ant & mehr 9
D Java-Applet einbinden Tools - Maven, Gradle, Ant & mehr 5
G Applet in die HTML-Datei einbinden Tools - Maven, Gradle, Ant & mehr 3
P Applet in HTML einbinden?? Tools - Maven, Gradle, Ant & mehr 14

Ähnliche Java Themen

Neue Themen


Oben