- Notifications
You must be signed in to change notification settings - Fork898
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-run
and--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 Imports
actions.
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-UNNAMED
Once 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 agoogle-java-format
formatter implementation that can beconfigured inWindow > Preferences > Java > Code Style > Formatter > Formatter Implementation
.
- 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 install
Please 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.