2015-08-10 2 views
6

Das Java-Programm muss in die JAR-Datei gepackt werden, damit es mit dem Befehl java -jar ausgeführt werden kann. Also warum muss ich javac mit java -jar javac Befehl ausführen? Wie hat Sun/Oracle das Java-Programm zur ausführbaren Binärdatei gemacht?Wenn Java in Java geschrieben wurde, warum kann ich JavaC als Java-Programm ausführen?

Ich weiß, dass es Tools gibt, die JAR-Datei in ausführbare Windows-Datei konvertieren können. Aber ich möchte, dass meine Dateien unter Linux/OS X ohne Bash-Skript ausgeführt werden können.

---------- UPDATE

ich diesen Link wirklich hilfreich: https://github.com/maynooth/CS210/wiki/Convert-Java-Executable-to-Linux-Executable

+2

Ich glaube, dass es in C geschrieben wurde (meistens).Wenn Sie möchten, können Sie ein paar Nachforschungen über native ausführbare Dateien für Jars – MadProgrammer

+2

@ MadProgrammer machen: Nein, ist es nicht. 'javac.exe' ist nur ein dünner Wrapper zum Aufruf der entsprechenden Java-Klasse. Es startet die VM (ähnlich wie java.exe) und ruft dann den Java-Compiler auf –

+0

@a_horse_with_no_name Haben Sie eine Referenz dafür? – MadProgrammer

Antwort

4

Wenn javac in Java geschrieben wurde, warum kann ich Javac ausführen, als ob es sich um eine kein Java-Programm? Why Java compiler as distributed as executable and not as JVM bytecode?

Zitiert seine Antwort hier unten

javac.exe

Die Antwort auf Ihre Frage von Jon Skeet für die Frage gegeben wurde bereits (auf meiner Installation, JDK 1.8 auf Windows x64) ist ungefähr 15K groß. Dies ist nicht der vollständige Compiler. Der Compiler selbst ist wirklich in Java geschrieben und javac.exe ist nur ein Launcher, effektiv. Dies gilt für viele der Werkzeuge, die mit Java kommen - es wäre ein Schmerz etwas wie laufen zu müssen sein:

java -cp path/to/javac.jar java.tools.Javac -cp path/to/your/libraries Foo.java 

Ein einfacher Weg, um die ganze Sache zu verstehen ist JRE (Java Runtime Environment) vorstellen fungiert als Zwischenschicht zwischen Ihrem Programm und dem Betriebssystem. JRE akzeptiert den Bytecode und führt Ihr Java-Programm aus. Der Javacompiler (Java-Compiler) konvertiert Ihren Java-Quellcode in plattformneutralen Bytecode (Ausnahmen sind vorhanden). Ich bin mir nicht sicher, ob Java, Java, Java in Java geschrieben ist oder nicht. Aber wenn sie es sind, dann müssen sie in verschiedenen Betriebssystemen (Plattformen) anders verknüpft/geladen werden.

kommt nun, wie Glas in Windows und Linux Java-Code auszuführen

Normalerweise nach JAR-Datei umgewandelt wird. Dann werden es zwei Dateien sein (meist zusammen mit JAR-Datei), um die JAR-Datei, ein für Windows zu starten und ein für Linux

Zum Beispiel Apache Tomcat-Dateien hat (in derselben Stelle)

startup.bat ==> to start program in windows. 
startup.sh ==> to start program in linux. 

Sie Abwechselnd könnte jar in exe für windows konvertieren. Für Linux reicht die angegebene Verbindung aus. Das Skript wird vom Befehlsinterpreter in Linux interpretiert und Ihre JAR-Datei wird ausgeführt.

Dieser Link gibt verschiedene Möglichkeiten zum Ausführen eines Shell-Skripts in Linux an. http://www.thegeekstuff.com/2010/07/execute-shell-script/

Dieser Link Code hat, kann Glas als Schläger laufen Run .jar from batch-file

Um es zusammenzufassen, Ihre JAR-Datei plattformunabhängig sein, aber sie Art und Weise die JAR-Datei für verschiedene Plattformen unterscheiden zu starten.

Verwandte Themen