<html><head><link rel="canonical" href="https://www.jetbrains.com/help/idea/java-compiler.html.md/" data-react-helmet="true"/></head><body># Java Compiler

&gt; **TL;DR**
&gt; `File | Settings | Build, Execution, Deployment | Compiler | Java Compiler` for Windows and Linux
&gt;
&gt;
&gt;
&gt; `IntelliJ&nbsp;IDEA | Settings | Build, Execution, Deployment | Compiler | Java Compiler` for macOS

On the Compiler | Java Compiler page, you can select the Java compiler to be used and specify associated options.

&gt; **Note:**
&gt; For the information on configuring JDK, refer to [Supported SDKs](sdk.html#supported-sdks).

## Compiler and bytecode versions

| Item | Description |
| --- | --- |
| Use compiler |  Select the compiler to be used:     * [Javac](http://docs.oracle.com/javase/8/docs/technotes/tools/windows/javac.html). This may be the compiler included in the IntelliJ&nbsp;IDEA distribution or a compiler from one of the project JDKs.    * Eclipse (also known as Eclipse Compiler for Java or ECJ). IntelliJ&nbsp;IDEA comes bundled with the Eclipse compiler.    * [Groovy-Eclipse](http://andrewclement.blogspot.ru/2010/02/running-groovy-eclipse-joint-compiler.html). This compiler lets you perform joint compilation of Groovy and Java code using the Eclipse compiler.    |
| Use '--release option' for cross-compilation (Java 9 and later) | By default, this option is selected. IntelliJ&nbsp;IDEA deduces from project settings when the cross-compilation is needed and automatically applies the `--release` compiler option for Java 9.  |
| Project bytecode version | Select the version of bytecode to be generated. (Roughly, this is the minimum target JVM version.)   If no particular version is specified, the bytecode version is defined by the compiler.     To specify different versions for particular modules, use the controls in the Per-module bytecode version area.    |
| Per-module bytecode version | If necessary, specify the target bytecode versions for individual modules (for example, if they should differ from that [set for the project](#bytecode)).   Click ![Add](https://resources.jetbrains.com/help/img/idea/2026.2/app.expui.general.add.svg) and select the modules of interest in the dialog that opens. Then, for each of the modules, click the corresponding Target bytecode version cell and select the version from the list.     Use ![Remove](https://resources.jetbrains.com/help/img/idea/2026.2/app.expui.general.remove.svg) to remove the selected module or modules from the list.    |

## Javac and Eclipse options

&gt; **Tip:**
&gt; If you are not happy with the version of the Eclipse compiler bundled with IntelliJ&nbsp;IDEA, you can use the Path to ECJ batch compiler tool option located in the `Settings | Build, Execution, Deployment | Compiler | Java Compiler` and specify a particular Eclipse compiler version.

| Item | Description |
| --- | --- |
| Use compiler from module target JDK when possible |  For the Javac compiler:    When this option is on and the version of the JDK associated with a module is different from that of the [build process JDK](#build_process_jdk), the compiler from the module JDK is used. The exception is when the version of the module JDK is earlier than 1.6. In such cases, the compiler from the build process JDK is used in the [cross-compilation mode](http://docs.oracle.com/javase/8/docs/technotes/tools/windows/javac.html#BHCIJIEG) against the classes of the module JDK.      When the option is off, all the modules are compiled with the same compiler, the one from the build process JDK. When necessary, the cross-compilation mode is used.      To start the build process, the latest of the available JDKs is used. This JDK is chosen from all the JDKs used in your modules, the default project JDK, and also the JDK bundled with IntelliJ&nbsp;IDEA.      IMPORTANT! The choice of the compiler does not affect the source code language level, and also the bytecode target level and linking. That is, irrespective of which compiler is used, the bytecode is linked against the JDK associated with the module, and the resulting code levels are exactly the ones that are specified in your project settings.                   &gt; **Tip:** &gt; For Java 9, the `--release` compiler option is set in `Settings \| Build, Execution, Deployment \| Compiler \| Java Compiler`. It automatically configures the Java compiler to produce class files that will link against an implementation of the given platform version. If you need to switch this option off, clear the checkbox in the settings.    |
|  Generate debugging info |  If this checkbox is selected, the compiler generates the information necessary for running the compiled classes in the debugger. |
| Report use of deprecated features |  If this checkbox is selected, the compiler displays warnings about the deprecated methods, classes, or fields encountered during compilation. (The corresponding warnings are shown in the compiler output window.) |
| Generate no warnings |  If this checkbox is selected, the compiler omits the warnings about dubious usages of language constructs. |
| Proceed on errors | For the Eclipse compiler: If you select this checkbox, the compiler continues the compilation even when compilation errors occur. |
| Path to ECJ batch compiler tool (leave empty to use bundled) | For the Eclipse compiler: Use this option if you need to specify a particular version of the Eclipse compiler. |
| Additional command line parameters |    Specify the command-line parameters and options to be passed to the compiler at its start. For more information about the available options, refer to the compiler documentation.      If you need more room to type, click ![Expand component](https://resources.jetbrains.com/help/img/idea/2026.2/app.general.expandComponent.svg) to open the Additional command line parameters dialog where the text entry area is larger.       When specifying the parameters and options, follow these rules:       * Use spaces to separate individual parameters and options, for example, `-client&nbsp;-ea&nbsp;-Xmx1024m`.    * If a parameter or an option includes spaces, enclose the spaces or the argument that contains the spaces in double quotes, for example, `some"&nbsp;"arg` or `"some&nbsp;arg"`.    * If a parameter or an option includes double quotes (e.g. as part of the argument), escape the double quotes by means of the backslashes, for example, `-Dmy.prop=\"quoted_value\"`.     |

## Groovy-Eclipse options

| Item | Description |
| --- | --- |
| Path to groovy-eclipse-batch jar |    Specify a path to your groovy-eclipse-batch jar location. Click ![Browse button](https://resources.jetbrains.com/help/img/idea/2026.2/browseButton.png) and specify the path to the `jar` file and click OK.      Note that it is necessary to enter the location of the groovy-eclipse-batch `jar` file for the compiler to work correctly.     |
| Сommand line parameters | Specify the command-line parameters and options to be passed to the compiler at its start. For more information about the available options, refer to the compiler documentation for the available options.   If you need more room to type, click ![Expand components](https://resources.jetbrains.com/help/img/idea/2026.2/app.general.expandComponent.svg) to open the Additional command line parameters dialog where the text entry area is larger.       When specifying the parameters and options, follow these rules:       * Use spaces to separate individual parameters and options, for example, `-client&nbsp;-ea&nbsp;-Xmx1024m`.    * If a parameter or an option includes spaces, enclose the spaces or the argument that contains the spaces in double quotes, for example, `some"&nbsp;"arg` or `"some&nbsp;arg"`.    * If a parameter or an option includes double quotes (e.g. as part of the argument), escape the double quotes by means of the backslashes, for example, `-Dmy.prop=\"quoted_value\"`.     |
| VM options | Use this option to modify attributes of the JVM, including stack or heap memory allocation, system properties, GC flags, and so on. For example, you can point to the Lombok file to pass some annotation parameters. |
| Generate debug info | If this checkbox is selected, the compiler generates the information necessary for running the compiled classes in the debugger. |

## See also

### Concepts

[Compile and build applications with IntelliJ&nbsp;IDEA](compiling-applications.html)

### Procedures

[Configure compiler settings](specifying-compilation-settings.html)

</body></html>