1. 概述

虽然IDE内置代码格式化功能,但使用命令行工具自动化格式化流程能确保团队风格统一,尤其适合大型项目或多开发者协作场景。本文将介绍在Linux环境下命令行格式化Java代码的方案(同样适用于Windows等系统)。

2. 示例代码

我们使用一个格式混乱的"Hello World"程序作为示例:

    public class HelloWorld 
{
        public static     void main(   String[]    args   )
    {
System.out.println(   
    "Hello World!")
 ;
    } }

这段代码存在明显格式问题: ✅ 缩进混乱 ✅ 存在多余空格(如 static void) ✅ System.out.println 语句跨多行 ✅ 类和方法结束大括号在同一行

我们更偏好将开始大括号附加到声明行末尾(而非单独成行)。先验证该代码可正常执行:

$ javac HelloWorld.java
$ java HelloWorld
Hello World!

3. 使用 astyle

astyle (Artistic Style)是支持Java等语言的跨语言格式化工具。以v3.6.3为例,执行格式化:

$ astyle --squeeze-ws --style=java HelloWorld.java
Formatted  /home/baeldung/projects/formatter/HelloWorld.java
  • --squeeze-ws移除多余空格
  • --style=java采用Java风格(附加大括号)

检查格式化结果:

$ cat HelloWorld.java
public class HelloWorld {
    public static void main( String[] args ) {
        System.out.println(
            "Hello World!")
        ;
    }
}

虽然解决了缩进和空格问题,但 System.out.println 仍跨三行。astyle提供丰富选项可进一步定制。

4. 使用 google-java-format

google-java-format **严格遵循Google Java Style**,同时支持IDE插件集成。以v1.24.0为例:

$ java -jar ./google-java-format-1.24.0-all-deps.jar -r HelloWorld.java
  • -r直接替换源文件(默认输出到stdout)

检查结果:

$ cat HelloWorld.java
public class HelloWorld {
  public static void main(String[] args) {
    System.out.println("Hello World!");
  }
}

⚠️ 完美解决所有格式问题,默认使用2空格缩进。通过 -h 可查看完整选项列表。

5. 使用 idea.sh format

IntelliJ的 idea.sh 脚本除启动IDE外,也可通过 format 命令行格式化代码

$ idea.sh format -allowDefaults HelloWorld.java
...
Formatting /home/baeldung/projects/formatter/HelloWorld.java...OK

1 file(s) scanned.
1 file(s) formatted.
  • -allowDefaults使用默认代码风格
  • ⚠️ 需关闭其他IntelliJ实例

检查结果:

$ cat HelloWorld.java 
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println(
                "Hello World!")
        ;
    }
}

System.out.println 仍跨行。可通过配置文件解决:

ij_java_keep_line_breaks = false

使用 -s 指定配置文件路径,更多选项参考文档

6. 使用Eclipse格式化工具

Eclipse同样支持命令行格式化

$ eclipse -noSplash -data /home/baeldung/eclipse-workspace -application org.eclipse.jdt.core.JavaCodeFormatter -config org.eclipse.jdt.core.prefs HelloWorld.java
...
Configuration Name: org.eclipse.jdt.core.prefs
Starting format job ...
Done.
  • -noSplash:禁用启动画面
  • -data指定工作空间路径
  • -application:调用格式化程序
  • -config指定配置文件(需预先创建

关键配置示例:

org.eclipse.jdt.core.formatter.tabulation.char=space

检查结果:

$ cat HelloWorld.java
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

彻底解决所有格式问题

7. 总结

本文对比了四种命令行Java格式化方案:

  1. astyle:跨语言支持,适合多语言项目
  2. google-java-format:严格遵循Google规范,适合标准化团队
  3. IntelliJ命令行:与IDE配置无缝集成,适合IntelliJ用户
  4. Eclipse命令行:依赖工作空间配置,适合Eclipse用户

选择建议:

  • 需多语言支持 → astyle
  • 追求严格规范 → google-java-format
  • 已使用IDE工具 → 对应命令行方案

各工具均支持批量处理文件/目录,可轻松集成到CI/CD流程中。实际项目中,建议结合pre-commit钩子实现自动化格式化检查。


原始标题:Formatting Java Code From the Command Line | Baeldung