- Notifications
You must be signed in to change notification settings - Fork904
Reformats Java source code to comply with Google Java Style.
License
google/google-java-format
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
google-java-format is a program that reformats Java source code to comply withGoogle Java Style.
Download the formatterand run it with:
java -jar /path/to/google-java-format-${GJF_VERSION?}-all-deps.jar <options> [files...]Note that it uses thejdk.compiler module to parse the Java source code. Thejava binary version used must therefore be from a JDK (not JRE) with a versionequal to or newer than the Java language version of the files being formatted.The minimum Java version can be found incore/pom.xml (currently Java 17). Analternative is to use the available GraalVM based native binaries instead.
The formatter can act on whole files, on limited lines (--lines), on specificoffsets (--offset), passing through to standard-out (default) or alteredin-place (--replace).
Option--help will print full usage details; including built-in documentationabout other flags, such as--aosp,--fix-imports-only,--skip-sorting-imports,--skip-removing-unused-import,--skip-reflowing-long-strings,--skip-javadoc-formatting, or the--dry-runand--set-exit-if-changed.
Using@<filename> reads options and filenames from a file, instead ofarguments.
To reformat changed lines in a specific patch, usegoogle-java-format-diff.py.
Note:There is no configurability as to the formatter's algorithm forformatting. This is a deliberate design decision to unify our code formatting ona single format.
Agoogle-java-format IntelliJ pluginis available from the plugin repository. To install it, go to your IDE'ssettings and select thePlugins category. Click theMarketplace tab, searchfor thegoogle-java-format plugin, and click theInstall button.
The plugin will be disabled by default. To enable,open the Project settings,then click "google-java-format Settings" and check the "Enablegoogle-java-format" checkbox.
To enable it by default in new projects,open the default settings for new projectsand configure it under "Other Settings/google-java-format Settings".
When enabled, it will replace the normalReformat Code andOptimize Importsactions.
The google-java-format plugin uses some internal classes that aren't availablewithout extra configuration. To use the plugin, you need toadd some options to your IDE's Java runtime.To do that, go toHelp→Edit Custom VM Options... and paste in these lines:
--add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED--add-exports=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED--add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED--add-exports=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMEDOnce you've done that, restart the IDE.
The latest version of thegoogle-java-format Eclipse plugin can be downloadedfrom thereleases page.Drop it into the Eclipsedrop-ins folderto activate the plugin.
The plugin adds two formatter implementations:
google-java-format: using 2 spaces indentaosp-java-format: using 4 spaces indent
These that can be selected in "Window" > "Preferences" > "Java" > "Code Style" >"Formatter" > "Formatter Implementation".
The plugin uses some internal classes that aren't available without extraconfiguration. To use the plugin, you will need to edit theeclipse.ini file.
Open theeclipse.ini file in any editor and paste in these lines towards theend (but anywhere after-vmargs will do):
--add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED--add-exports=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED--add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED--add-exports=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMEDOnce you've done that, restart the IDE.
- Visual Studio Code
- Gradle plugins
- Apache Maven plugins
- spotless
- spotify/fmt-maven-plugin
- talios/googleformatter-maven-plugin
- Cosium/maven-git-code-format:A maven plugin that automatically deploys google-java-format as apre-commit git hook.
- SBT plugins
- Github Actions
- googlejavaformat-action:Automatically format your Java files when you push on github
The formatter can be used in software which generates java to output morelegible java code. Just include the library in your maven/gradle/etc.configuration.
google-java-format uses internal javac APIs for parsing Java source. Thefollowing JVM flags are required when running on JDK 16 and newer, due toJEP 396: Strongly Encapsulate JDK Internals by Default:
--add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED--add-exports=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED--add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED--add-exports=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED<dependency> <groupId>com.google.googlejavaformat</groupId> <artifactId>google-java-format</artifactId> <version>${google-java-format.version}</version></dependency>
dependencies { implementation'com.google.googlejavaformat:google-java-format:$googleJavaFormatVersion'}You can then use the formatter through theformatSource methods. E.g.
StringformattedSource =newFormatter().formatSource(sourceString);
or
CharSourcesource = ...CharSinkoutput = ...newFormatter().formatSource(source,output);
Your starting point should be the instance methods ofcom.google.googlejavaformat.java.Formatter.
mvn installPlease seethe contributors guide for details.
Copyright 2015 Google Inc.Licensed under the Apache License, Version 2.0 (the "License"); you may notuse this file except in compliance with the License. You may obtain a copy ofthe License at http://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law or agreed to in writing, softwaredistributed under the License is distributed on an "AS IS" BASIS, WITHOUTWARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See theLicense for the specific language governing permissions and limitations underthe License.About
Reformats Java source code to comply with Google Java Style.
Topics
Resources
License
Code of conduct
Contributing
Security policy
Uh oh!
There was an error while loading.Please reload this page.