jar erzeugt jar?

darkeye2

Bekanntes Mitglied
Hallo, ich habe einen jar file, mit einigen klassen, davon ein paar sehr kleine für bestimmte handlungen. Nun soll das programm bei überhabe eines befehls passende klassen raussuchen und eine klasse schreiben, die diese für die geforderte funktion verbindet. Das schreiben dieses codes funktioniert auch (halt als String erstmal) ...

Nun zu meiner frage, wie kann ich mit einem selbstgeschriebenen programm dafür sorgen, dass:
1.) ein textfile (NewClass.java) compiliert wird
2.) eine ausführbare jar datei mit klassen aus dem laufenden jar und der selbst compilierten classe erstellt wird


Hoffe es ist verständlich, was genau ich meine
 
Über andere wege hab ich mir bis jetzt noch net so viele gedanken gemacht, dachte eigentlich, dass es möglich sein sollte, immerhin gibt es auch C programme, die neue programm compilieren können, und compiller gibts ja auch, die können ja auch quellcode compilieren, und da eclipse auch jar files erstellen kann ist es ja scheinbar auch mit einem selbstgeschriebenen programm möglich.

Ist es wirklich so schwer?

Wäre über Tipps zur umsetzung sehr dankbar.
 
Es ist auf jeden Fall sehr umständlich und geht sicher besser. Wenn du unbedingt sich selbst modifizierende Programme schreiben willst, dann probiere mal assembler 😉

Was willst du genau erreichen mit der ganzen Sache ?

Ich hab das selber nie probiert, ja ich habe sogar noch nie selber direkt javac aufgerufen(IDE verwöhnt xD), aber ich denke mal, wenn du unbedingt eine neue jar willst, dann wirst du in etwa dies tun müssen:

-Schreibe deine neue Klasse.java
-Rufe javac auf und compiliere sie.
-Entpacke die anderen class Dateien aus der "Haupt"-jar.
-verwende die passenden Aufrufe um eine neue jar aus den class Dateien zu erstellen.

So oder so ähnlich würde es wohl gehen.
Klingt aber nur wenig sinnvoll.
 
Wenn du unbedingt sich selbst modifizierende Programme schreiben willst, dann probiere mal assembler 😉

OTT: bin grad dabei assembler zu lernen, fällt mir etwas schwerer als java (die hanze prozessorstruktur, ... ist schon recht viel theorie, bis man was praktisches machen kann), aber mal schauen, wie weit ich da komme, hab mir vor kurzem erst ein buch gekauft, bin grad am durcharbeiten

BTT:
ich hab mir auch schon gedacht, dass ich theoretisch einfach den java eigenen compiler nutzen kann, aber dieser ist soweit ich weiß nur im JDK enthalten, somit können normalanwender, die nur JRE haben das programm dann nicht nutzen...
 
@darkeye2
mit dem Java-Compiler in den tools.jar und dem java.util.jar Package könnte man so was komplett im Speicher erstellen, falls auf dem Ausführungssystem ein JDK vorhanden ist.

Doch wieso so kompliziert? Normalerweise erstellt man ein Subprogramm, welches eine Parameterdatei einliest und das System damit initialisiert. Alles was man noch machen muss ist, diese Parameterdatei (.xml, .properties oder .txt) erstellen, zusammen mit vorgefertigten Klassen in ein neues JAR schreiben und im JAR-Manifest auf main() verweisen. Fertig ist ein neues individuelles Programm.

Slawa
 
@slawaweis: Ich denke, es geht hier darum, ein Programm zu schreiben, das den Quellcode eines anderen Programms (z.B. ein Skript, das ein Nutzer eingegeben hat) entgegennimmt und dieses Programm ausführt. Eventuell wird auch nicht das Programm direkt eingegeben, sondern aus verschiedenen Parametern heraus ein Programm erzeugt, das den Anforderungen (den Parametern entsprechend) genügt.

@darkeye2: Ist die gerade dargelegte Annahme korrekt? Du solltest vielleicht konkreter werden.

Ark
 
@Ark, ja du liegst richtig, der nutzer kann gewisse befehle eingeben, danach interpretiert das programm die eingaben und erzeugt einen java code, der in einer klasse gespeichert wird, diese klasse greift je nachdem, was der user eingibt auf 3- 43 andere klassen zu, die betroffenen klassen liegen entweder im jar oder werden vom programm heruntergeladen (von einer von mir festgelegten adresse).

Nun ist das einzigste Problem, dass ich die erstellte klasse noch compilieren müsste und das ganze in einen jar file packen, der ausführbar sein soll (manifest datei erstellen ist auch kein problem).
 
Klingt für mich nach dem Einsatzgebiet einer Skriptsprache ?
Z.B. BeanShell - Lightweight Scripting for Java oder ähnliches.
Du könntest statt einer class Datei einen Skript erzeugen und eine Standardjar schreiben, die den Skript eben anstatt deiner class verwendet.
Beanshell kann auch im wesentlichen Javacode direkt ausführen, der Schritt des Kompilieren würde wegfallen.

Wie sich das mit dem Packen einer jar ohne jdk verhält weiß ich nicht.
 

Zurück
Oben