Skip to content

Switch formatter to forked google-java-format CLI in dedicated JVM#264

Merged
mkurz merged 2 commits intosbt:mainfrom
mkurz:javafmt-jvm-process
Apr 15, 2026
Merged

Switch formatter to forked google-java-format CLI in dedicated JVM#264
mkurz merged 2 commits intosbt:mainfrom
mkurz:javafmt-jvm-process

Conversation

@mkurz
Copy link
Copy Markdown
Member

@mkurz mkurz commented Apr 15, 2026

Instead of wrapping sbt commands in another sbt process, the plugin now solves the underlying problem directly by running google-java-format in its own JVM with the required jdk.compiler access flags.

This uses the google-java-format CLI rather than the in-process library call, so formatter execution also works when javafmt is triggered indirectly, for example via javafmtOnCompile.

Before, formatting happened in-process via:

formatter.formatSourceAndFixImports(input)

Now the plugin launches a separate java process and invokes the google-java-format CLI with the required module flags.

From a user perspective, this is now transparent: no matter how javafmt gets invoked, the formatter runs in a JVM with the required flags. In particular, this fixes the javafmtOnCompile / task-dependency case that the previous wrapper-based approach could not handle reliably because it just created alias for the commands.

@mkurz
Copy link
Copy Markdown
Member Author

mkurz commented Apr 15, 2026

This gets launched now when calling java formatter:

/home/mkurz/.sdkman/candidates/java/17.0.18-tem/bin/java @/tmp/google-java-format-java14461083564241482249.args

This is what /tmp/google-java-format-java14461083564241482249.args looks like (when calling e.g. javafmt):

-Xmx256m
--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
-cp
/home/mkurz/.sbt/1.0/plugins/target/scala-2.12/sbt-1.0/classes:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/com/github/sbt/sbt-dynver_2.12_1.0/5.1.1/sbt-dynver_2.12_1.0-5.1.1.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/com/github/sbt/sbt-pgp_2.12_1.0/2.3.1/sbt-pgp_2.12_1.0-2.3.1.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/org/scalameta/sbt-scalafmt_2.12_1.0/2.5.6/sbt-scalafmt_2.12_1.0-2.5.6.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/org/scala-sbt/sbt-contraband_2.12_1.0/0.8.0/sbt-contraband_2.12_1.0-0.8.0.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/com/github/sbt/sbt-header_2.12_1.0/5.11.0/sbt-header_2.12_1.0-5.11.0.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/com/eed3si9n/sbt-assembly_2.12_1.0/2.3.1/sbt-assembly_2.12_1.0-2.3.1.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/com/typesafe/sbt-mima-plugin_2.12_1.0/1.1.5/sbt-mima-plugin_2.12_1.0-1.1.5.jar:/home/mkurz/.ivy2/local/com.github.sbt/sbt-java-formatter/scala_2.12/sbt_1.0/0.11.1-M1+0-1135ef89+20260415-1326-SNAPSHOT/jars/sbt-java-formatter.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/org/scalameta/sbt-native-image_2.12_1.0/0.3.4/sbt-native-image-0.3.4.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/org/scala-sbt/sbt-dependency-tree_2.12_1.0/1.12.2/sbt-dependency-tree_2.12_1.0-1.12.2.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/ch/epfl/scala/sbt-scalafix_2.12_1.0/0.14.5/sbt-scalafix_2.12_1.0-0.14.5.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/com/github/sbt/sbt-native-packager_2.12_1.0/1.11.7/sbt-native-packager_2.12_1.0-1.11.7.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/com/github/sbt/dynver_2.12/5.1.1/dynver_2.12-5.1.1.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/com/github/sbt/pgp-library_2.12/2.3.1/pgp-library_2.12-2.3.1.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/com/eed3si9n/gigahorse-okhttp_2.12/0.4.0/gigahorse-okhttp_2.12-0.4.0.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/com/googlecode/java-diff-utils/diffutils/1.3.0/diffutils-1.3.0.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/org/scalameta/scalafmt-sysops_2.12/3.10.0/scalafmt-sysops_2.12-3.10.0.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/org/scalameta/scalafmt-dynamic_2.12/3.10.0/scalafmt-dynamic_2.12-3.10.0.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/org/scala-sbt/contraband_2.12/0.8.0/contraband_2.12-0.8.0.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/com/eed3si9n/jarjarabrams/jarjar-abrams-core_2.12/1.14.1/jarjar-abrams-core_2.12-1.14.1.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/com/typesafe/mima-core_2.12/1.1.5/mima-core_2.12-1.1.5.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/com/google/googlejavaformat/google-java-format/1.24.0/google-java-format-1.24.0.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/org/eclipse/jgit/org.eclipse.jgit/5.13.5.202508271544-r/org.eclipse.jgit-5.13.5.202508271544-r.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/ch/epfl/scala/scalafix-interfaces/0.14.5/scalafix-interfaces-0.14.5.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/io/get-coursier/interface/1.0.28/interface-1.0.28.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/modules/scala-collection-compat_2.12/2.14.0/scala-collection-compat_2.12-2.14.0.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/org/apache/commons/commons-compress/1.28.0/commons-compress-1.28.0.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/org/apache/ant/ant/1.10.15/ant-1.10.15.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/com/github/eldis/tool-launcher/0.2.2/tool-launcher-0.2.2.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/modules/scala-parser-combinators_2.12/1.1.2/scala-parser-combinators_2.12-1.1.2.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/modules/scala-xml_2.12/2.3.0/scala-xml_2.12-2.3.0.jar:/home/mkurz/.sbt/boot/scala-2.12.21/lib/scala-library.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/org/bouncycastle/bcpg-jdk18on/1.78.1/bcpg-jdk18on-1.78.1.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/com/eed3si9n/gigahorse-core_2.12/0.4.0/gigahorse-core_2.12-0.4.0.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/com/squareup/okhttp3/okhttp/3.14.0/okhttp-3.14.0.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/com/github/bigwheel/util-backports_2.12/2.1/util-backports_2.12-2.1.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/org/scalameta/scalafmt-interfaces/3.10.0/scalafmt-interfaces-3.10.0.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/io/get-coursier/coursier_2.12/2.1.24/coursier_2.12-2.1.24.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/com/typesafe/config/1.4.5/config-1.4.5.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/org/parboiled/parboiled_2.12/2.5.1/parboiled_2.12-2.5.1.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/com/eed3si9n/sjson-new-scalajson_2.12/0.10.0/sjson-new-scalajson_2.12-0.10.0.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/com/eed3si9n/jarjar/jarjar/1.14.1/jarjar-1.14.1.jar:/home/mkurz/.sbt/boot/scala-2.12.21/lib/scala-reflect.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/com/google/guava/guava/32.1.3-jre/guava-32.1.3-jre.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/com/googlecode/javaewah/JavaEWAH/1.1.13/JavaEWAH-1.1.13.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/commons-codec/commons-codec/1.19.0/commons-codec-1.19.0.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/commons-io/commons-io/2.20.0/commons-io-2.20.0.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/org/apache/commons/commons-lang3/3.18.0/commons-lang3-3.18.0.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/org/apache/ant/ant-launcher/1.10.15/ant-launcher-1.10.15.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/org/bouncycastle/bcprov-jdk18on/1.78.1/bcprov-jdk18on-1.78.1.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/org/bouncycastle/bcutil-jdk18on/1.78.1/bcutil-jdk18on-1.78.1.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/com/typesafe/ssl-config-core_2.12/0.2.2/ssl-config-core_2.12-0.2.2.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/org/reactivestreams/reactive-streams/1.0.2/reactive-streams-1.0.2.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/com/squareup/okio/okio/1.17.2/okio-1.17.2.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/io/get-coursier/dependency_2.12/0.3.2/dependency_2.12-0.3.2.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/com/github/plokhotnyuk/jsoniter-scala/jsoniter-scala-core_2.12/2.13.5.2/jsoniter-scala-core_2.12-2.13.5.2.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/io/get-coursier/coursier-core_2.12/2.1.24/coursier-core_2.12-2.1.24.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/io/get-coursier/coursier-cache_2.12/2.1.24/coursier-cache_2.12-2.1.24.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/io/get-coursier/coursier-proxy-setup/2.1.24/coursier-proxy-setup-2.1.24.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/com/eed3si9n/sjson-new-core_2.12/0.10.0/sjson-new-core_2.12-0.10.0.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/com/eed3si9n/shaded-scalajson_2.12/1.0.0-M4/shaded-scalajson_2.12-1.0.0-M4.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/com/eed3si9n/shaded-jawn-parser_2.12/1.3.2/shaded-jawn-parser_2.12-1.3.2.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/org/ow2/asm/asm/9.6/asm-9.6.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/org/ow2/asm/asm-commons/9.6/asm-commons-9.6.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/org/checkerframework/checker-qual/3.37.0/checker-qual-3.37.0.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/com/google/errorprone/error_prone_annotations/2.21.1/error_prone_annotations-2.21.1.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/com/google/j2objc/j2objc-annotations/2.8/j2objc-annotations-2.8.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/io/github/alexarchambault/concurrent-reference-hash-map/1.1.0/concurrent-reference-hash-map-1.1.0.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/io/get-coursier/coursier-util_2.12/2.1.24/coursier-util_2.12-2.1.24.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/io/github/alexarchambault/is-terminal/0.1.1/is-terminal-0.1.1.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/io/get-coursier/jniutils/windows-jni-utils/0.3.3/windows-jni-utils-0.3.3.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/org/codehaus/plexus/plexus-archiver/4.10.0/plexus-archiver-4.10.0.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/org/codehaus/plexus/plexus-container-default/2.1.1/plexus-container-default-2.1.1.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/org/virtuslab/scala-cli/config_2.12/1.1.3/config_2.12-1.1.3.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/io/github/alexarchambault/windows-ansi/windows-ansi/0.0.6/windows-ansi-0.0.6.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/io/get-coursier/cache-util/2.1.24/cache-util-2.1.24.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/org/ow2/asm/asm-tree/9.6/asm-tree-9.6.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/javax/inject/javax.inject/1/javax.inject-1.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/4.0.1/plexus-utils-4.0.1.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/org/codehaus/plexus/plexus-io/3.5.0/plexus-io-3.5.0.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/io/airlift/aircompressor/0.27/aircompressor-0.27.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/org/tukaani/xz/1.9/xz-1.9.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/com/github/luben/zstd-jni/1.5.6-3/zstd-jni-1.5.6-3.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/org/codehaus/plexus/plexus-classworlds/2.6.0/plexus-classworlds-2.6.0.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/org/apache/xbean/xbean-reflect/3.7/xbean-reflect-3.7.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/org/virtuslab/scala-cli/specification-level_2.12/1.1.3/specification-level_2.12-1.1.3.jar:/home/mkurz/.cache/coursier/v1/https/repo1.maven.org/maven2/org/fusesource/jansi/jansi/2.4.1/jansi-2.4.1.jar:/home/mkurz/.sbt/boot/scala-2.12.21/lib/scala-xml_2.12-2.3.0.jar:/home/mkurz/.sbt/boot/scala-2.12.21/lib/scala-compiler.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/scala-parser-combinators_2.12-1.1.2.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/gigahorse-apache-http_2.12-0.9.3.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/shaded-jawn-parser_2.12-1.3.2.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/ivy-2.3.0-sbt-77cc781d727b367d3761f097d89f5a4762771d41.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/actions_2.12-1.12.2.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/scala-xml_2.12-2.3.0.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/log4j-api-2.17.1.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/util-logging_2.12-1.12.2.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/util-control_2.12-1.12.2.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/jline-style-3.27.1.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/sbt-1.12.2.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/jna-platform-5.12.0.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/disruptor-3.4.2.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/jline-native-3.27.1.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/zinc-core_2.12-1.12.0.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/test-interface-1.0.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/error_prone_annotations-2.4.0.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/util-interface-1.12.2.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/zinc-compile_2.12-1.12.0.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/jna-5.12.0.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/test-agent-1.12.2.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/reactive-streams-1.0.3.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/zinc-classpath_2.12-1.12.0.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/jline-builtins-3.27.1.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/caffeine-2.8.5.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/zinc_2.12-1.12.0.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/completion_2.12-1.12.2.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/zinc-persist-core-assembly-1.12.0.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/testing_2.12-1.12.2.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/core-macros_2.12-1.12.2.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/ssl-config-core_2.12-0.6.1.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/util-tracking_2.12-1.12.2.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/scala-collection-compat_2.12-2.13.0.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/jline-2.14.7-sbt-9a88bc413e2b34a4580c001c654d1a7f4f65bf18.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/collections_2.12-1.12.2.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/command_2.12-1.12.2.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/file-tree-views-2.1.12.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/run_2.12-1.12.2.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/slf4j-api-1.7.36.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/compiler-interface-1.12.0.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/sjson-new-core_2.12-0.10.1.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/shaded-apache-httpclient5-0.9.3.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/scripted-plugin_2.12-1.12.2.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/shaded-scalajson_2.12-1.0.0-M4.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/util-relation_2.12-1.12.2.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/scala-library-2.12.21.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/lm-coursier-shaded_2.12-2.1.10.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/task-system_2.12-1.12.2.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/io_2.12-1.10.5.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/ipcsocket-1.6.3.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/log4j-slf4j-impl-2.17.1.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/zero-allocation-hashing-0.16.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/util-position_2.12-1.12.2.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/sjson-new-scalajson_2.12-0.10.1.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/jline-terminal-jni-3.27.1.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/template-resolver-0.1.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/zinc-persist_2.12-1.12.0.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/util-cache_2.12-1.12.2.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/librarymanagement-core_2.12-1.12.0.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/checker-qual-3.4.1.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/main_2.12-1.12.2.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/zinc-classfile_2.12-1.12.0.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/tasks_2.12-1.12.2.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/zinc-lm-integration_2.12-1.12.2.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/logic_2.12-1.12.2.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/config-1.4.2.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/jsch-2.27.5.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/zinc-compile-core_2.12-1.12.0.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/sbinary_2.12-0.5.1.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/scala-reflect-2.12.21.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/zinc-apiinfo_2.12-1.12.0.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/scala-compiler-2.12.21.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/jline-reader-3.27.1.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/protocol_2.12-1.12.2.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/gigahorse-core_2.12-0.9.3.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/compiler-bridge_2.12-1.12.0.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/librarymanagement-ivy_2.12-1.12.0.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/jline-terminal-3.27.1.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/main-settings_2.12-1.12.2.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/log4j-core-2.17.1.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/launcher-interface-1.5.2.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/sjson-new-murmurhash_2.12-0.10.1.jar:/home/mkurz/.sbt/boot/scala-2.12.21/org.scala-sbt/sbt/1.12.2/jansi-2.4.1.jar
com.google.googlejavaformat.java.Main
--replace
/home/mkurz/git-repos/sbt/internal/util-interface/src/main/java/xsbti/Problem.java
/home/mkurz/git-repos/sbt/main/src/main/java/sbt/internal/JLineLoader.java

Here you can see Problem.java and JLineLoader.java needed reformatting.

So the classpath is the same as from the sbt session you are currently in. However that does not matter as only classes get loaded that the google formatter really needs.

@mkurz mkurz merged commit d4573c9 into sbt:main Apr 15, 2026
2 checks passed
@mkurz mkurz deleted the javafmt-jvm-process branch April 15, 2026 12:39
mkurz added a commit to mkurz/playframework that referenced this pull request Apr 15, 2026
- google-java-format runs in its CLI in dedicated JVM now
- sbt/sbt-java-formatter#264
if (!options.reorderModifiers()) {
throw new MessageOnlyException(
"The forked google-java-format CLI does not support reorderModifiers = false. " +
"Please use the default reorderModifiers setting.")
Copy link
Copy Markdown
Member Author

@mkurz mkurz Apr 15, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant