diff --git a/README.md b/README.md
index d420bbb..cc041ca 100644
--- a/README.md
+++ b/README.md
@@ -99,6 +99,9 @@ For example, you may prefer that the `check` goal is performed in an earlier pha
`style` sets the formatter style to be _google_ or _aosp_. By default this is 'google'. Projects using Android conventions may prefer `aosp`.
+`exportCompilerPackages` exports the `javac` packages needed from the `jdk.compiler` for the [google-java-format](https://github.com/google/google-java-format#jdk-16) to work with JDK 16+ with using additional JVM arguments to Maven.
+
+
example:
```xml
@@ -119,6 +122,7 @@ example:
false
false
+ true
diff --git a/pom.xml b/pom.xml
index b76a5cf..526de9d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -85,6 +85,11 @@
google-java-format
1.14.0
+
+ org.burningwave
+ core
+ 12.46.0
+
junit
@@ -236,15 +241,5 @@
-
- jdk17+
-
- [17,)
-
-
-
- --add-exports jdk.compiler/com.sun.tools.javac.api=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
-
-
diff --git a/src/main/java/com/spotify/fmt/AbstractFMT.java b/src/main/java/com/spotify/fmt/AbstractFMT.java
index 1a87023..ae65722 100644
--- a/src/main/java/com/spotify/fmt/AbstractFMT.java
+++ b/src/main/java/com/spotify/fmt/AbstractFMT.java
@@ -1,5 +1,7 @@
package com.spotify.fmt;
+import static org.burningwave.core.assembler.StaticComponentContainer.Modules;
+
import com.google.common.base.Charsets;
import com.google.common.io.CharSource;
import com.google.googlejavaformat.java.*;
@@ -57,6 +59,9 @@ public abstract class AbstractFMT extends AbstractMojo {
@Parameter(defaultValue = "false", property = "skipSortingImports")
private boolean skipSortingImports = false;
+ @Parameter(defaultValue = "false", property = "exportCompilerPackages")
+ private boolean exportCompilerPackages = false;
+
@Parameter(defaultValue = "google", property = "style")
private String style;
@@ -81,6 +86,10 @@ public void execute() throws MojoExecutionException, MojoFailureException {
if (skipSortingImports) {
getLog().info("Skipping sorting imports");
}
+ if (exportCompilerPackages) {
+ getLog().info("Exports javac packages from jdk.compiler module");
+ exportCompilerPackages();
+ }
List directoriesToFormat = new ArrayList<>();
if (sourceDirectory.exists()) {
directoriesToFormat.add(sourceDirectory);
@@ -112,6 +121,16 @@ public void execute() throws MojoExecutionException, MojoFailureException {
postExecute(this.filesProcessed, this.nonComplyingFiles);
}
+ private void exportCompilerPackages() {
+ Modules.exportPackageToAllUnnamed("jdk.compiler", "com.sun.tools.javac.file");
+ Modules.exportPackageToAllUnnamed("jdk.compiler", "com.sun.tools.javac.main");
+ Modules.exportPackageToAllUnnamed("jdk.compiler", "com.sun.tools.javac.parser");
+ Modules.exportPackageToAllUnnamed("jdk.compiler", "com.sun.tools.javac.tree");
+ Modules.exportPackageToAllUnnamed("jdk.compiler", "com.sun.tools.javac.util");
+ Modules.exportPackageToAllUnnamed("jdk.compiler", "com.sun.tools.javac.code");
+ Modules.exportPackageToAllUnnamed("jdk.compiler", "com.sun.tools.javac.api");
+ }
+
/**
* Post Execute action. It is called at the end of the execute method. Subclasses can add extra
* checks.
diff --git a/src/main/resources/burningwave.static.properties b/src/main/resources/burningwave.static.properties
new file mode 100644
index 0000000..45df5a8
--- /dev/null
+++ b/src/main/resources/burningwave.static.properties
@@ -0,0 +1,3 @@
+managed-logger.repository.enabled=false
+banner.hide=true
+resource-releaser.enabled=false
diff --git a/src/test/java/com/spotify/fmt/FMTTest.java b/src/test/java/com/spotify/fmt/FMTTest.java
index 1db33d9..a137d8a 100644
--- a/src/test/java/com/spotify/fmt/FMTTest.java
+++ b/src/test/java/com/spotify/fmt/FMTTest.java
@@ -7,15 +7,29 @@
import org.apache.commons.io.IOUtils;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugin.testing.MojoRule;
+import org.junit.FixMethodOrder;
import org.junit.Rule;
import org.junit.Test;
+import org.junit.runners.MethodSorters;
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class FMTTest {
private static String FORMAT = "format";
private static String CHECK = "check";
@Rule public MojoRule mojoRule = new MojoRule();
+ @Test
+ public void aaaaFirstTestThatAddsCompilerExports() throws Exception {
+ // Note: After this test has added compiler exports, it will work for the rest of the tests as
+ // well.
+ // However, adding a test before this that doesn't add exports, then all tests will fail?!
+ FMT fmt = (FMT) mojoRule.lookupConfiguredMojo(loadPom("exportcompilerpackages"), FORMAT);
+ fmt.execute();
+
+ assertThat(fmt.getFilesProcessed()).hasSize(3);
+ }
+
@Test
public void noSource() throws Exception {
FMT fmt = (FMT) mojoRule.lookupConfiguredMojo(loadPom("nosource"), FORMAT);
diff --git a/src/test/resources/exportcompilerpackages/pom.xml b/src/test/resources/exportcompilerpackages/pom.xml
new file mode 100644
index 0000000..b3d09f9
--- /dev/null
+++ b/src/test/resources/exportcompilerpackages/pom.xml
@@ -0,0 +1,50 @@
+
+ 4.0.0
+
+ org.apache.maven.plugin.my.unit
+ project-to-test
+ 1.0.0
+ jar
+ Test MyMojo
+
+
+
+ junit
+ junit
+ 4.13.1
+ test
+
+
+
+
+
+
+ com.spotify.fmt
+ fmt-maven-plugin
+ 2.12
+
+ true
+
+
+
+
+ format
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/test/resources/exportcompilerpackages/src/main/java/HelloWorld1.java b/src/test/resources/exportcompilerpackages/src/main/java/HelloWorld1.java
new file mode 100644
index 0000000..b2d5ee8
--- /dev/null
+++ b/src/test/resources/exportcompilerpackages/src/main/java/HelloWorld1.java
@@ -0,0 +1,7 @@
+package notestsource.src.main.java;
+
+public class HelloWorld1 {
+ public static void main(String[] args) {
+ System.out.println("Hello World!");
+ }
+}
diff --git a/src/test/resources/exportcompilerpackages/src/main/java/HelloWorld2.java b/src/test/resources/exportcompilerpackages/src/main/java/HelloWorld2.java
new file mode 100644
index 0000000..b2d5ee8
--- /dev/null
+++ b/src/test/resources/exportcompilerpackages/src/main/java/HelloWorld2.java
@@ -0,0 +1,7 @@
+package notestsource.src.main.java;
+
+public class HelloWorld1 {
+ public static void main(String[] args) {
+ System.out.println("Hello World!");
+ }
+}
diff --git a/src/test/resources/exportcompilerpackages/src/test/java/HelloWorldTest.java b/src/test/resources/exportcompilerpackages/src/test/java/HelloWorldTest.java
new file mode 100644
index 0000000..3b2afb4
--- /dev/null
+++ b/src/test/resources/exportcompilerpackages/src/test/java/HelloWorldTest.java
@@ -0,0 +1,7 @@
+package notestsource.src.main.java;
+
+public class HelloWorldTest {
+ public static void main(String[] args) {
+ System.out.println("Hello World!");
+ }
+}