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!"); + } +}