Java kompiler

Tags:    java compiler

<< < 12 > >>
Hej Udviklere,

Jeg sidder her og rodder, lidt med at kompile java (Ja, nu I sidder jo nok, og tænker, at dette er jo ganske simpelt, det er jo blot at kalde "javac <options> <filnavn>" fra terminalen af, og så er den kompilet :)). Men dette er ikke tilfældet, den funktionalitet, jeg skal benytte mig af(hvis muligt) er at kompile en given string, med java "source code" til et .class fil. Hvor at, det normale er for java compilere, at de skal konvertere ens .java filer til .class filer, der er fyldt med byte-kode. Så er det jeg har tænkt mig, at have en String, hvor jeg har kildekoden, og skal have konverteret denne string til byte-kode. Som meget gerne skal kunne komme ud, som et almindeligt byte array, så man herefter kan oprette sine objekter, direkte fra dette byte array.

Jeg har kigget en del på javax.tools, da man jo får en API til, java compileren. Desværre kan jeg i skrivende stund ikke få den til at have den funktionalitet, jeg skal bruge. Den kan godt konvertere en String til .class filer, men den kan ikke umindbart returnere et byte array, eller sende sit output til en stream.

For at starte API'en til java kompileren benytte jeg mig af følgende kald, efter at have tilføjet tools.jar til min buildpath.

Fold kodeboks ind/udJava kode 


Håber at I kan hjælpe og forstår mit spørgsmål, ellers må I lige skrive en kommentar :)



11 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 2 karma
Sorter efter stemmer Sorter efter dato
Det kan du ikke fra en ikke-signeret applet :-(
Det kræver signering at pille ved classloaderen.

http://docs.oracle.com/javase/tutorial/deployment/applet/security.html



Nu har du jo egentlig ikke skrevet et eneste spørgsmål, men jeg fandt lige sådan et link her til dig: http://www.java2s.com/Code/Java/JDK-6/CompilingfromMemory.htm . Det skulle meget gerne vise dig hvordan du gør det.



Svaret er eclipse, det fungere rigtig godt med god dokumentation, og så skal du ikke bruge terminalen. Eclipse hjælper dig, mht krydsreferencer til objekter og varialbler og funktioner. ctrl+space



Svaret er eclipse, det fungere rigtig godt med god dokumentation, og så skal du ikke bruge terminalen. Eclipse hjælper dig, mht krydsreferencer til objekter og varialbler og funktioner. ctrl+space


Har du overhovedet læst spørgsmålet?



Svaret er eclipse, det fungere rigtig godt med god dokumentation, og så skal du ikke bruge terminalen. Eclipse hjælper dig, mht krydsreferencer til objekter og varialbler og funktioner. ctrl+space


Har du overhovedet læst spørgsmålet?


Du har selv lige skrevet at der ikke er et eneste spørgsmål - hvordan skulle han så kunne læse det?



Jah, kan godt se nu, at jeg vidst slet ikke fik spurgt :P..

Men, det spørgsmål jeg ville havde haft skrevet, var: "er der var nogle af jer, der ved hvor man kan finde information omkring, at kompile til et byte array ?"

Men dette er ikke længere et gyldigt spørgsmål, da jeg selv fandt svaret på, hvor man kan finde information omkring dette. Jeg indsætter et link til dette, når jeg når tilbage til min egen bærbar, hvor at linket ligger :)

Men indtil videre, skal I have tak for forsøget, og må sige at Mads Ravn har været tættest på bortset, fra at det var blot at kompile fra en string til en .class file, som jeg jo allerede havde beskrevet jeg vidste i, det spørgsmål der alligevel ikke helt var et spørgsmål ^^



Hvorfor compiler du ikke bare gennem filsystemet som normalt og så indlæser filen efterfølgende ?



Grunden til at jeg ikke kompiler normalt, er da det er en java applet jeg vil lave. Og når den skal have adgang til fil-systemet, så skal den være signeret (har skam forsøgt med denne løsning, men syntes ikke at det var optimalt). Så det er for at undgå, og signere min applet, da det er jeg personligt finder, det generende for brugeren at man skal godkende applet, før den fungere ordentligt.

Men, det jeg har fundet er på fra midten af side 9 og fremad i denne pdf: http://fivedots.coe.psu.ac.th/~ad/jg/javaArt1/onTheFlyArt1.pdf

og det ligner, at det vil kunne løse mit problem :)



Ok, men hvad vil du så gøre med det compilerede resultat ?
Du kan jo heller ikke gemme det, og uden brugerens godkendelse kan du ikke indlæse den compilerede klasse.



jeg vil køre hans fil, efter den er kompilet :)

Det behøver, der jo ikke godkendelse til, da det jo blot er byte-code og dette burde, "forholdsvist" laves om til et nyt Object/Class, og udfra dette Object/Class vil jeg så kalde "main" fra :)



<< < 12 > >>
t