(window.webpackJsonp=window.webpackJsonp||[]).push([[1587],{1995:function(a,e,t){"use strict";t.r(e);var s=t(31),n=Object(s.a)({},(function(){var a=this,e=a.$createElement,t=a._self._c||e;return t("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[t("h1",{attrs:{id:"java-compiler-javac"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#java-compiler-javac"}},[a._v("#")]),a._v(" Java Compiler - 'javac'")]),a._v(" "),t("h2",{attrs:{id:"the-javac-command-getting-started"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#the-javac-command-getting-started"}},[a._v("#")]),a._v(" The 'javac' command - getting started")]),a._v(" "),t("h3",{attrs:{id:"simple-example"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#simple-example"}},[a._v("#")]),a._v(" Simple example")]),a._v(" "),t("p",[a._v('Assuming that the "HelloWorld.java" contains the following Java source:')]),a._v(" "),t("div",{staticClass:"language-java extra-class"},[t("pre",{pre:!0,attrs:{class:"language-java"}},[t("code",[t("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("public")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("class")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[a._v("HelloWorld")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("public")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("static")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("void")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("main")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),t("span",{pre:!0,attrs:{class:"token class-name"}},[a._v("String")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v(" args"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token class-name"}},[a._v("System")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),a._v("out"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("println")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"Hello world!"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n\n")])])]),t("p",[a._v("(For an explanation of the above code, please refer to "),t("a",{attrs:{href:"http://stackoverflow.com/documentation/java/84/compile-and-run-your-first-java-program#t=201608210035544002048",target:"_blank",rel:"noopener noreferrer"}},[a._v("Getting started with Java Language"),t("OutboundLink")],1),a._v(" .)")]),a._v(" "),t("p",[a._v("We can compile the above file using this command:")]),a._v(" "),t("div",{staticClass:"language-java extra-class"},[t("pre",{pre:!0,attrs:{class:"language-java"}},[t("code",[a._v("$ javac "),t("span",{pre:!0,attrs:{class:"token class-name"}},[a._v("HelloWorld")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),a._v("java \n\n")])])]),t("p",[a._v('This produces a file called "HelloWorld.class", which we can then run as follows:')]),a._v(" "),t("div",{staticClass:"language-java extra-class"},[t("pre",{pre:!0,attrs:{class:"language-java"}},[t("code",[a._v("$ java "),t("span",{pre:!0,attrs:{class:"token class-name"}},[a._v("HelloWorld")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token class-name"}},[a._v("Hello")]),a._v(" world"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("!")]),a._v("\n\n")])])]),t("p",[a._v("The key points to note from this example are:")]),a._v(" "),t("ol",[t("li",[a._v('The source filename "HelloWorld.java" must match the class name in the source file ... which is '),t("code",[a._v("HelloWorld")]),a._v(". If they don't match, you will get a compilation error.")]),a._v(" "),t("li",[a._v('The bytecode filename "HelloWorld.class" corresponds to the classname. If you were to rename the "HelloWorld.class", you would get an error when your tried to run it.')]),a._v(" "),t("li",[a._v("When running a Java application using "),t("code",[a._v("java")]),a._v(", you supply the classname NOT the bytecode filename.")])]),a._v(" "),t("h3",{attrs:{id:"example-with-packages"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#example-with-packages"}},[a._v("#")]),a._v(" Example with packages")]),a._v(" "),t("p",[a._v("Most practical Java code uses packages to organize the namespace for classes and reduce the risk of accidental class name collision.")]),a._v(" "),t("p",[a._v("If we wanted to declare the "),t("code",[a._v("HelloWorld")]),a._v(" class in a package call "),t("code",[a._v("com.example")]),a._v(', the "HelloWorld.java" would contain the following Java source:')]),a._v(" "),t("div",{staticClass:"language-java extra-class"},[t("pre",{pre:!0,attrs:{class:"language-java"}},[t("code",[t("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("package")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token namespace"}},[a._v("com"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),a._v("example")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v("\n\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("public")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("class")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[a._v("HelloWorld")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("public")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("static")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("void")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("main")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),t("span",{pre:!0,attrs:{class:"token class-name"}},[a._v("String")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v(" args"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token class-name"}},[a._v("System")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),a._v("out"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("println")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"Hello world!"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n\n")])])]),t("p",[a._v("This source code file needs to stored in a directory tree whose structure corresponds to the package naming.")]),a._v(" "),t("div",{staticClass:"language-java extra-class"},[t("pre",{pre:!0,attrs:{class:"language-java"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),a._v(" # the current directory "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),t("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("for")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("this")]),a._v(" example"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("--")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("--")]),a._v("com\n "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("--")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("--")]),a._v("example\n "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("--")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("--")]),t("span",{pre:!0,attrs:{class:"token class-name"}},[a._v("HelloWorld")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),a._v("java\n\n")])])]),t("p",[a._v("We can compile the above file using this command:")]),a._v(" "),t("div",{staticClass:"language-java extra-class"},[t("pre",{pre:!0,attrs:{class:"language-java"}},[t("code",[a._v("$ javac com"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("/")]),a._v("example"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("/")]),t("span",{pre:!0,attrs:{class:"token class-name"}},[a._v("HelloWorld")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),a._v("java \n\n")])])]),t("p",[a._v('This produces a file called "com/example/HelloWorld.class"; i.e. after compilation, the file structure should look like this:')]),a._v(" "),t("div",{staticClass:"language-java extra-class"},[t("pre",{pre:!0,attrs:{class:"language-java"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),a._v(" # the current directory "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),t("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("for")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("this")]),a._v(" example"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("--")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("--")]),a._v("com\n "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("--")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("--")]),a._v("example\n "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("--")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("--")]),t("span",{pre:!0,attrs:{class:"token class-name"}},[a._v("HelloWorld")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),a._v("java\n "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("--")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("--")]),t("span",{pre:!0,attrs:{class:"token class-name"}},[a._v("HelloWorld")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),t("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("class")]),a._v("\n\n")])])]),t("p",[a._v("We can then run the application as follows:")]),a._v(" "),t("div",{staticClass:"language-java extra-class"},[t("pre",{pre:!0,attrs:{class:"language-java"}},[t("code",[a._v("$ java "),t("span",{pre:!0,attrs:{class:"token class-name"}},[t("span",{pre:!0,attrs:{class:"token namespace"}},[a._v("com"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),a._v("example"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")])]),a._v("HelloWorld")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token class-name"}},[a._v("Hello")]),a._v(" world"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("!")]),a._v("\n\n")])])]),t("p",[a._v("Additional points to note from this example are:")]),a._v(" "),t("ol",[t("li",[a._v("The directory structure must match the package name structure.")]),a._v(" "),t("li",[a._v('When you run the class, the full class name must be supplied; i.e. "com.example.HelloWorld" not "HelloWorld".')]),a._v(" "),t("li",[a._v("You don't have to compile and run Java code out of the current directory. We are just doing it here for illustration.")])]),a._v(" "),t("h3",{attrs:{id:"compiling-multiple-files-at-once-with-javac"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#compiling-multiple-files-at-once-with-javac"}},[a._v("#")]),a._v(" Compiling multiple files at once with 'javac'.")]),a._v(" "),t("p",[a._v("If your application consists of multiple source code files (and most do!) you can compile them one at a time. Alternatively, you can compile multiple files at the same time by listing the pathnames:")]),a._v(" "),t("div",{staticClass:"language-java extra-class"},[t("pre",{pre:!0,attrs:{class:"language-java"}},[t("code",[a._v("$ javac "),t("span",{pre:!0,attrs:{class:"token class-name"}},[a._v("Foo")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),a._v("java "),t("span",{pre:!0,attrs:{class:"token class-name"}},[a._v("Bar")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),a._v("java\n\n")])])]),t("p",[a._v("or using your command shell's filename wildcard functionality ....")]),a._v(" "),t("div",{staticClass:"language-java extra-class"},[t("pre",{pre:!0,attrs:{class:"language-java"}},[t("code",[a._v("$ javac "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("*")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),a._v("java\n$ javac com"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("/")]),a._v("example"),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("/*.java\n$ javac */")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("*")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("*")]),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("/*.java #Only works on Zsh or with globstar enabled on your shell\n\n")])])])]),t("p",[a._v('This will compile all Java source files in the current directory, in the "com/example" directory, and recursively in child directories respectively. A third alternative is to supply a list of source filenames (and compiler options) as a file. For example:')]),a._v(" "),t("div",{staticClass:"language-java extra-class"},[t("pre",{pre:!0,attrs:{class:"language-java"}},[t("code",[a._v("$ javac "),t("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[a._v("@sourcefiles")]),a._v("\n\n")])])]),t("p",[a._v("where the "),t("code",[a._v("sourcefiles")]),a._v(" file contains:")]),a._v(" "),t("div",{staticClass:"language-java extra-class"},[t("pre",{pre:!0,attrs:{class:"language-java"}},[t("code",[t("span",{pre:!0,attrs:{class:"token class-name"}},[a._v("Foo")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),a._v("java\n"),t("span",{pre:!0,attrs:{class:"token class-name"}},[a._v("Bar")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),a._v("java\ncom"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("/")]),a._v("example"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("/")]),t("span",{pre:!0,attrs:{class:"token class-name"}},[a._v("HelloWorld")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),a._v("java\n\n")])])]),t("p",[a._v("Note: compiling code like this is appropriate for small one-person projects, and for once-off programs. Beyond that, it is advisable to select and use a Java build tool. Alternatively, most programmers use a Java IDE (e.g. "),t("a",{attrs:{href:"https://netbeans.org/",target:"_blank",rel:"noopener noreferrer"}},[a._v("NetBeans"),t("OutboundLink")],1),a._v(", "),t("a",{attrs:{href:"https://eclipse.org/",target:"_blank",rel:"noopener noreferrer"}},[a._v("eclipse"),t("OutboundLink")],1),a._v(", "),t("a",{attrs:{href:"https://www.jetbrains.com/idea/",target:"_blank",rel:"noopener noreferrer"}},[a._v("IntelliJ IDEA"),t("OutboundLink")],1),a._v(') which offers an embedded compiler and incremental building of "projects".')]),a._v(" "),t("h3",{attrs:{id:"commonly-used-javac-options"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#commonly-used-javac-options"}},[a._v("#")]),a._v(" Commonly used 'javac' options")]),a._v(" "),t("p",[a._v("Here are a few options for the "),t("code",[a._v("javac")]),a._v(" command that are likely to be useful to you")]),a._v(" "),t("ul",[t("li",[a._v("The "),t("code",[a._v("-d")]),a._v(' option sets a destination directory for writing the ".class" files.')]),a._v(" "),t("li",[a._v("The "),t("code",[a._v("-sourcepath")]),a._v(" option sets a source code search path.")]),a._v(" "),t("li",[a._v("The "),t("code",[a._v("-cp")]),a._v(" or "),t("code",[a._v("-classpath")]),a._v(" option sets the search path for finding external and previously compiled classes. For more information on the classpath and how to specify it, refer to the "),t("a",{attrs:{href:"http://stackoverflow.com/documentation/java/3720/classpath",target:"_blank",rel:"noopener noreferrer"}},[a._v("The Classpath"),t("OutboundLink")],1),a._v(" Topic.")]),a._v(" "),t("li",[a._v("The "),t("code",[a._v("-version")]),a._v(" option prints the compiler's version information.")])]),a._v(" "),t("p",[a._v("A more complete list of compiler options will be described in a separate example.")]),a._v(" "),t("h3",{attrs:{id:"references"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#references"}},[a._v("#")]),a._v(" References")]),a._v(" "),t("p",[a._v("The definitive reference for the "),t("code",[a._v("javac")]),a._v(" command is the "),t("a",{attrs:{href:"http://docs.oracle.com/javase/8/docs/technotes/tools/windows/javac.html",target:"_blank",rel:"noopener noreferrer"}},[a._v("Oracle manual page for "),t("code",[a._v("javac")]),t("OutboundLink")],1),a._v(".")]),a._v(" "),t("h2",{attrs:{id:"compiling-for-a-different-version-of-java"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#compiling-for-a-different-version-of-java"}},[a._v("#")]),a._v(" Compiling for a different version of Java")]),a._v(" "),t("p",[a._v("The Java programming language (and its runtime) has undergone numerous changes since its release since its initial public release. These changes include:")]),a._v(" "),t("ul",[t("li",[a._v("Changes in the Java programming language syntax and semantics")]),a._v(" "),t("li",[a._v("Changes in the APIs provided by the Java standard class libraries.")]),a._v(" "),t("li",[a._v("Changes in the Java (bytecode) instruction set and classfile format.")])]),a._v(" "),t("p",[a._v("With very few exceptions (for example the "),t("code",[a._v("enum")]),a._v(' keyword, changes to some "internal" classes, etc), these changes are backwards compatible.')]),a._v(" "),t("ul",[t("li",[a._v("A Java program that was compiled using an older version of the Java toolchain will run on a newer version Java platform without recompilation.")]),a._v(" "),t("li",[a._v("A Java program that was written in an older version of Java will compile successfully with a new Java compiler.")])]),a._v(" "),t("h3",{attrs:{id:"compiling-old-java-with-a-newer-compiler"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#compiling-old-java-with-a-newer-compiler"}},[a._v("#")]),a._v(" Compiling old Java with a newer compiler")]),a._v(" "),t("p",[a._v("If you need to (re-)compile older Java code on a newer Java platform to run on the newer platform, you generally don't need to give any special compilation flags. In a few cases (e.g. if you had used "),t("code",[a._v("enum")]),a._v(" as an identifier) you could use the "),t("code",[a._v("-source")]),a._v(" option to disable the new syntax. For example, given the following class:")]),a._v(" "),t("div",{staticClass:"language-java extra-class"},[t("pre",{pre:!0,attrs:{class:"language-java"}},[t("code",[t("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("public")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("class")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[a._v("OldSyntax")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("private")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("static")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("int")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("enum")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("// invalid in Java 5 or later")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n\n")])])]),t("p",[a._v("the following is required to compile the class using a Java 5 compiler (or later):")]),a._v(" "),t("div",{staticClass:"language-java extra-class"},[t("pre",{pre:!0,attrs:{class:"language-java"}},[t("code",[a._v("$ javac "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),a._v("source "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("1.4")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[a._v("OldSyntax")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),a._v("java\n\n")])])]),t("h3",{attrs:{id:"compiling-for-an-older-execution-platform"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#compiling-for-an-older-execution-platform"}},[a._v("#")]),a._v(" Compiling for an older execution platform")]),a._v(" "),t("p",[a._v("If you need to compile Java to run on an older Java platforms, the simplest approach is to install a JDK for the oldest version you need to support, and use that JDK's compiler in your builds.")]),a._v(" "),t("p",[a._v("You can also compile with a newer Java compiler, but there are complicated. First of all, there some important preconditions that must be satisfied:")]),a._v(" "),t("ul",[t("li",[a._v("The code you are compiling must not use Java language constructs that were not available in the version of Java that you are targeting.")]),a._v(" "),t("li",[a._v("The code must not depend on standard Java classes, fields, methods and so on that were not available in the older platforms.")]),a._v(" "),t("li",[a._v("Third party libraries that the code depends must also be built for the older platform and available at compile-time and run-time.")])]),a._v(" "),t("p",[a._v("Given the preconditions are met, you can recompile code for an older platform using the "),t("code",[a._v("-target")]),a._v(" option. For example,")]),a._v(" "),t("div",{staticClass:"language-java extra-class"},[t("pre",{pre:!0,attrs:{class:"language-java"}},[t("code",[a._v("$ javac "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),a._v("target "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("1.4")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[a._v("SomeClass")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),a._v("java\n\n")])])]),t("p",[a._v("will compile the above class to produce bytecodes that are compatible with Java 1.4 or later JVM. (In fact, the "),t("code",[a._v("-source")]),a._v(" option implies a compatible "),t("code",[a._v("-target")]),a._v(", so "),t("code",[a._v("javac -source 1.4 ...")]),a._v(" would have the same effect. The relationship between "),t("code",[a._v("-source")]),a._v(" and "),t("code",[a._v("-target")]),a._v(" is described in the Oracle documentation.)")]),a._v(" "),t("p",[a._v("Having said that, if you simply use "),t("code",[a._v("-target")]),a._v(" or "),t("code",[a._v("-source")]),a._v(", you will still be compiling against the standard class libraries provided by the compiler's JDK. If you are not careful, you can end up with classes with the correct bytecode version, but with dependencies on APIs that are not available. The solution is to use the "),t("code",[a._v("-bootclasspath")]),a._v(" option. For example:")]),a._v(" "),t("div",{staticClass:"language-java extra-class"},[t("pre",{pre:!0,attrs:{class:"language-java"}},[t("code",[a._v("$ javac "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),a._v("target "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("1.4")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("--")]),a._v("bootclasspath path"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("/")]),t("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("to")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("/")]),a._v("java1"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("4")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("/")]),a._v("rt"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),a._v("jar "),t("span",{pre:!0,attrs:{class:"token class-name"}},[a._v("SomeClass")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),a._v("java\n\n")])])]),t("p",[a._v("will compile against an alternative set of runtime libraries. If the class being compiled has (accidental) dependencies on newer libraries, this will give you compilation errors.")]),a._v(" "),t("h4",{attrs:{id:"remarks"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#remarks"}},[a._v("#")]),a._v(" Remarks")]),a._v(" "),t("p",[a._v("The "),t("code",[a._v("javac")]),a._v(" command is used for compiling Java source files to bytecode files. Bytecode files are platform independent. This means that you can compile your code on one kind of hardware and operating system, and then run the code on any other platform that supports Java.")]),a._v(" "),t("p",[a._v("The "),t("code",[a._v("javac")]),a._v(" command is included in the Java Development Kit (JDK) distributions.")]),a._v(" "),t("p",[a._v("The Java compiler and the rest of the standard Java toolchain places the following restrictions on the code:")]),a._v(" "),t("ul",[t("li",[a._v('Source code is held in files with the suffix ".java"')]),a._v(" "),t("li",[a._v('Bytecodes are held in files with the suffix ".class"')]),a._v(" "),t("li",[a._v("For source and bytecode files in the file system, the file pathnames must reflect the package and class naming.")])]),a._v(" "),t("p",[a._v("Note: The "),t("code",[a._v("javac")]),a._v(" compiler should not be confused with the "),t("a",{attrs:{href:"http://stackoverflow.com/documentation/java/5152/just-in-time-jit-compiler",target:"_blank",rel:"noopener noreferrer"}},[a._v("Just in Time (JIT) compiler"),t("OutboundLink")],1),a._v(" which compiles bytecodes to native code.")])])}),[],!1,null,null,null);e.default=n.exports}}]);