2016-10-23 2 views
1

Ich habe eine Frage, von der ich ziemlich verwirrt bin.java - Kompiliercode auf Clientseite ohne JDK

Ich bin mir bewusst, die Unterschiede zwischen J ava R untime E nviroment und J ava D evelopement K es.

Ich schreibe ein Programm, das die ToolProvider.getSystemJavaCompiler() Methode verwendet, um Java-Code aus dem Code zu kompilieren.

Nun wurde mir mitgeteilt, dass ich keinen Code von der Clientseite kompilieren kann, wenn mein Client JDK nicht installiert hat. Meine Hauptfrage ist, wie kann ich das tun? Ich möchte nicht, dass meine Kunden JDK auf ihrem Computer installieren müssen, nur um mein Programm auszuführen.

Vielen Dank im Voraus!

+0

Führen Sie die virtuelle Maschine nur mit JRE aus und versuchen Sie, das kompilierte Programm auszuführen. – gkiko

+1

Wenn Ihnen der Unterschied bekannt ist, warum glauben Sie, dass die JRE für den Benutzer nicht ausreicht? –

+0

Warum können Sie Code auf dem Computer des Benutzers ohne JDK kompilieren? – SLaks

Antwort

0

Sie müssen es auf Ihrem System kompilieren und die Klassendatei der entsprechenden Java-Quelldatei an jeden verteilen.

Diese Klassendatei benötigt kein JDK, aber JRE muss auf diesem System installiert sein, um die Klassendatei auszuführen.

+1

Nicht für 'getSystemJavaCompiler'. Lies die Frage. – SLaks

+0

Schauen Sie auf bearbeiten ... – NonameSL

+0

Ja früher war es anders. :) Obwohl, in einfachen Worten können Sie den Code nicht kompilieren, bis und wenn Sie javac haben, d. H. Die mit JDK kommt. Hoffe es löst Ihre Anfrage. –

0

Wenn Sie Code kompilieren möchten, benötigen Sie einen Compiler. Wenn also nicht erwartet werden kann, dass der Benutzer den benötigten Compiler hat, müssen Sie ihn einfach bündeln.

Ich kann wirklich nicht sagen, ich weiß, wie man den Standard javac Compiler zu bündeln, obwohl es wahrscheinlich möglich ist, streng genommen, die JAR-Datei zu finden, die es enthält, und dass bündeln zusammen mit Ihrem Code. Keine Ahnung, wie robust eine solche Lösung wäre.

Aber abhängig von Ihren Bedürfnissen benötigen Sie möglicherweise nicht den Standard javac. Es gibt Tonnen von Bytecode-Erzeugungsbibliotheken mit mehr oder weniger hoher Funktionalität. Ich würde wirklich nichts empfehlen, mit dem ich keine persönliche Erfahrung habe, aber Beispiele sind Byte Buddy oder ASM. Sie könnten wahrscheinlich auch ABCL verwenden.