You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@maven.apache.org by "wilx (via GitHub)" <gi...@apache.org> on 2026/07/28 17:46:02 UTC
[PR] [MCOMPILER-578] - Track outputs across compiler executions [maven-compiler-plugin]
wilx opened a new pull request, #1091:
URL: https://github.com/apache/maven-compiler-plugin/pull/1091
## Summary
Keep the final class files deterministic when multiple compiler executions use different release levels and share an
output directory.
## Root cause
An earlier execution can overwrite an existing class file without changing its filename. `IncrementalBuildHelper`
compares input and output file names, so a later execution can incorrectly consider its source up to date even though
a different execution produced the shared output.
## Changes
- Add an Invoker regression test that runs `clean compile` followed by `compile` and verifies the Java 8 classes and
Java 11 module descriptor.
- Track the last `goal@executionId` that processed each mapped output in Maven's per-project plugin context.
- Recompile when another execution processed an overlapping output, while allowing a repeated invocation of the same
execution to remain up to date.
- Avoid filesystem timestamps and their platform-dependent precision.
## Validation
- `mvn -Prun-its verify`: 77 passed, 0 failed, 5 environment-specific skips.
- Focused `MCOMPILER-525` and `MCOMPILER-578` Invoker tests: passed.
- Unit tests: 32 passed.
- Spotless, Checkstyle, and `git diff --check`: passed.
Following this checklist to help us incorporate your
contribution quickly and easily:
- [x] Make sure there is a [JIRA issue](https://issues.apache.org/jira/browse/MCOMPILER) filed
for the change (usually before you start working on it). Trivial changes like typos do not
require a JIRA issue. Your pull request should address just this issue, without
pulling in other changes.
- [x] Each commit in the pull request should have a meaningful subject line and body.
- [x] Format the pull request title like `[MCOMPILER-XXX] - Fixes bug in ApproximateQuantiles`,
where you replace `MCOMPILER-XXX` with the appropriate JIRA issue. Best practice
is to use the JIRA issue title in the pull request title and in the first line of the
commit message.
- [x] Write a pull request description that is detailed enough to understand what the pull request does, how, and why.
- [x] Run `mvn clean verify` to make sure basic checks pass. A more thorough check will
be performed on your pull request automatically.
- [x] You have run the integration tests successfully (`mvn -Prun-its clean verify`).
If your pull request is about ~20 lines of code you don't need to sign an
[Individual Contributor License Agreement](https://www.apache.org/licenses/icla.pdf) if you are unsure
please ask on the developers list.
To make clear that you license your contribution under
the [Apache License Version 2.0, January 2004](http://www.apache.org/licenses/LICENSE-2.0)
you have to acknowledge this by using the following check-box.
- [x] I hereby declare this contribution to be licenced under the
[Apache License Version 2.0, January 2004](http://www.apache.org/licenses/LICENSE-2.0)
- [ ] In any other case, please file an
[Apache Individual Contributor License Agreement](https://www.apache.org/licenses/icla.pdf).
Fixes #788
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: issues-unsubscribe@maven.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] [MCOMPILER-578] Track outputs across compiler executions [maven-compiler-plugin]
Posted by "Copilot (via GitHub)" <gi...@apache.org>.
Copilot commented on code in PR #1091:
URL: https://github.com/apache/maven-compiler-plugin/pull/1091#discussion_r3669119481
##########
src/main/java/org/apache/maven/plugin/compiler/CompilationOutputRegistry.java:
##########
@@ -0,0 +1,141 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.maven.plugin.compiler;
+
+import java.io.File;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.codehaus.plexus.compiler.util.scan.InclusionScanException;
+import org.codehaus.plexus.compiler.util.scan.mapping.SourceMapping;
+
+/**
+ * Tracks output files processed by compiler executions for the current project and Maven session.
+ *
+ * <p>Multiple compiler executions may share an output directory while using different compiler options.
+ * {@link org.apache.maven.shared.incremental.IncrementalBuildHelper} compares output file names before and after
+ * compilation, so it cannot detect an existing output overwritten by another execution. This registry lets a later
+ * execution detect that overlap without relying on file timestamps, whose precision varies between file systems.</p>
+ *
+ * <p>The registry is stored in Maven's plugin context, which is shared by all executions of this plugin for one
+ * project and discarded after the Maven session.</p>
+ */
+final class CompilationOutputRegistry {
+ private static final String KEY = CompilationOutputRegistry.class.getName() + ".compiledOutputs";
+
+ /**
+ * Prevents instantiation.
+ */
+ private CompilationOutputRegistry() {}
+
+ /**
+ * Maps sources to normalized absolute output paths.
+ *
+ * @param mapping mapping from source paths to output paths
+ * @param outputDirectory compiler output directory
+ * @param sourceRoots configured source roots
+ * @param sources sources selected by the compiler execution
+ * @return expected output paths
+ * @throws InclusionScanException if a source cannot be mapped
+ */
+ static Set<Path> mapOutputs(
+ SourceMapping mapping, File outputDirectory, List<String> sourceRoots, Set<File> sources)
+ throws InclusionScanException {
+ Set<Path> outputs = new HashSet<>();
+ for (String sourceRoot : sourceRoots) {
+ Path root = Paths.get(sourceRoot).toAbsolutePath().normalize();
+ for (File source : sources) {
+ Path path = source.toPath().toAbsolutePath().normalize();
+ if (path.startsWith(root)) {
+ for (File output : mapping.getTargetFiles(
+ outputDirectory, root.relativize(path).toString())) {
+ outputs.add(output.toPath().toAbsolutePath().normalize());
+ }
+ }
+ }
+ }
Review Comment:
A source can be mapped multiple times if `sourceRoots` contains nested/overlapping roots (e.g., `src/main` and `src/main/java`). In that case the code will generate outputs for multiple different relative paths, potentially introducing false overlap detections and unnecessary recompiles. A robust fix is to map each source against exactly one root (typically the longest matching root) and only call `getTargetFiles` once per source.
##########
src/it/MCOMPILER-578/verify.groovy:
##########
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+def exampleClass = new File( basedir, 'target/classes/org/example/Example.class' )
+assert exampleClass.isFile()
+def exampleMajorVersion = exampleClass.bytes[7] & 0xFF
+// major_version: 52 = Java 8, from the base-compile execution.
+assert exampleMajorVersion == 52
+
+def moduleInfoClass = new File( basedir, 'target/classes/module-info.class' )
+assert moduleInfoClass.isFile()
+def moduleInfoMajorVersion = moduleInfoClass.bytes[7] & 0xFF
+// major_version: 55 = Java 11, from the base-modules-compile execution.
+assert moduleInfoMajorVersion == 55
Review Comment:
Classfile `major_version` is a u2 at offsets 6..7. Reading only `bytes[7]` works for current versions but is technically incomplete. Consider decoding `(bytes[6] << 8) | bytes[7]` (with proper unsigned handling) to match the classfile spec and avoid future edge cases.
##########
src/main/java/org/apache/maven/plugin/compiler/AbstractCompilerMojo.java:
##########
@@ -1569,6 +1586,54 @@ private Set<File> computeStaleSources(
return staleSources;
}
+ /**
+ * Maps selected sources to their expected compiler outputs.
+ *
+ * @param compilerConfiguration the compiler configuration
+ * @param compiler the selected compiler
+ * @param sources sources selected by the current execution
+ * @return normalized absolute output paths
+ */
+ private Set<Path> getOutputPaths(CompilerConfiguration compilerConfiguration, Compiler compiler, Set<File> sources)
+ throws CompilerException, MojoExecutionException {
+ SourceMapping mapping = getSourceMapping(compilerConfiguration, compiler);
+
+ File outputDirectory =
+ compiler.getCompilerOutputStyle() == CompilerOutputStyle.ONE_OUTPUT_FILE_FOR_ALL_INPUT_FILES
+ ? buildDirectory
+ : getOutputDirectory();
+ try {
+ return CompilationOutputRegistry.mapOutputs(mapping, outputDirectory, getCompileSourceRoots(), sources);
+ } catch (InclusionScanException e) {
+ throw new MojoExecutionException("Error mapping sources to their outputs.", e);
+ }
+ }
+
+ /**
+ * Checks whether a different compiler execution last processed an expected output.
+ *
+ * @param compilerExecution the current execution
+ * @param outputs expected outputs of the current execution
+ * @return whether an output overlaps with another execution
+ */
+ private boolean hasPreviouslyCompiledOutput(String compilerExecution, Set<Path> outputs) {
+ Optional<Path> output = CompilationOutputRegistry.find(getPluginContext(), compilerExecution, outputs);
+ if (output.isPresent() && (getLog().isDebugEnabled() || showCompilationChanges)) {
+ getLog().info("\tOutput from another compiler execution: " + output.get());
+ }
+ return output.isPresent();
+ }
Review Comment:
This logs at INFO whenever DEBUG is enabled (even if `showCompilationChanges` is false). That can unexpectedly add INFO-level noise for users running with `-X`. Consider logging at INFO only when `showCompilationChanges` is true, and at DEBUG when only `getLog().isDebugEnabled()` is true.
##########
src/test/java/org/apache/maven/plugin/compiler/CompilationOutputRegistryTest.java:
##########
@@ -0,0 +1,84 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.maven.plugin.compiler;
+
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+
+class CompilationOutputRegistryTest {
+ private static final String FIRST_EXECUTION = "compile@first";
+
+ private static final String SECOND_EXECUTION = "compile@second";
+
+ private static final Path OUTPUT = Paths.get("target/classes/Example.class");
+
+ private static final Path OTHER_OUTPUT = Paths.get("target/classes/Other.class");
Review Comment:
Production usage stores normalized absolute output paths (via `CompilationOutputRegistry.mapOutputs(...)`). Using relative paths in these tests can mask path-normalization/equality issues (absolute vs relative `Path` keys won’t match). Consider using `toAbsolutePath().normalize()` here (or adding a targeted test for absolute-path behavior) so the test data matches real registry keys.
##########
src/it/MCOMPILER-578/verify.groovy:
##########
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+def exampleClass = new File( basedir, 'target/classes/org/example/Example.class' )
+assert exampleClass.isFile()
+def exampleMajorVersion = exampleClass.bytes[7] & 0xFF
+// major_version: 52 = Java 8, from the base-compile execution.
+assert exampleMajorVersion == 52
Review Comment:
Classfile `major_version` is a u2 at offsets 6..7. Reading only `bytes[7]` works for current versions but is technically incomplete. Consider decoding `(bytes[6] << 8) | bytes[7]` (with proper unsigned handling) to match the classfile spec and avoid future edge cases.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: issues-unsubscribe@maven.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] [MCOMPILER-578] Track outputs across compiler executions [maven-compiler-plugin]
Posted by "wilx (via GitHub)" <gi...@apache.org>.
wilx commented on code in PR #1091:
URL: https://github.com/apache/maven-compiler-plugin/pull/1091#discussion_r3669156195
##########
src/main/java/org/apache/maven/plugin/compiler/CompilationOutputRegistry.java:
##########
@@ -0,0 +1,141 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.maven.plugin.compiler;
+
+import java.io.File;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.codehaus.plexus.compiler.util.scan.InclusionScanException;
+import org.codehaus.plexus.compiler.util.scan.mapping.SourceMapping;
+
+/**
+ * Tracks output files processed by compiler executions for the current project and Maven session.
+ *
+ * <p>Multiple compiler executions may share an output directory while using different compiler options.
+ * {@link org.apache.maven.shared.incremental.IncrementalBuildHelper} compares output file names before and after
+ * compilation, so it cannot detect an existing output overwritten by another execution. This registry lets a later
+ * execution detect that overlap without relying on file timestamps, whose precision varies between file systems.</p>
+ *
+ * <p>The registry is stored in Maven's plugin context, which is shared by all executions of this plugin for one
+ * project and discarded after the Maven session.</p>
+ */
+final class CompilationOutputRegistry {
+ private static final String KEY = CompilationOutputRegistry.class.getName() + ".compiledOutputs";
+
+ /**
+ * Prevents instantiation.
+ */
+ private CompilationOutputRegistry() {}
+
+ /**
+ * Maps sources to normalized absolute output paths.
+ *
+ * @param mapping mapping from source paths to output paths
+ * @param outputDirectory compiler output directory
+ * @param sourceRoots configured source roots
+ * @param sources sources selected by the compiler execution
+ * @return expected output paths
+ * @throws InclusionScanException if a source cannot be mapped
+ */
+ static Set<Path> mapOutputs(
+ SourceMapping mapping, File outputDirectory, List<String> sourceRoots, Set<File> sources)
+ throws InclusionScanException {
+ Set<Path> outputs = new HashSet<>();
+ for (String sourceRoot : sourceRoots) {
+ Path root = Paths.get(sourceRoot).toAbsolutePath().normalize();
+ for (File source : sources) {
+ Path path = source.toPath().toAbsolutePath().normalize();
+ if (path.startsWith(root)) {
+ for (File output : mapping.getTargetFiles(
+ outputDirectory, root.relativize(path).toString())) {
+ outputs.add(output.toPath().toAbsolutePath().normalize());
+ }
+ }
+ }
+ }
Review Comment:
Is this really something people do? SMH
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: issues-unsubscribe@maven.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] [MCOMPILER-578] Track outputs across compiler executions [maven-compiler-plugin]
Posted by "desruisseaux (via GitHub)" <gi...@apache.org>.
desruisseaux commented on PR #1091:
URL: https://github.com/apache/maven-compiler-plugin/pull/1091#issuecomment-5116543863
Flagging as 3.x because 4.x automatically writes the output in a different directory for each Java release when declaring sources in the recommended way (with the new `<sources>` element).
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: issues-unsubscribe@maven.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] [MCOMPILER-578] Track outputs across compiler executions [maven-compiler-plugin]
Posted by "wilx (via GitHub)" <gi...@apache.org>.
wilx commented on PR #1091:
URL: https://github.com/apache/maven-compiler-plugin/pull/1091#issuecomment-5109818499
I have pushed a fix for all of the review comments.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: issues-unsubscribe@maven.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] [MCOMPILER-578] Track outputs across compiler executions [maven-compiler-plugin]
Posted by "desruisseaux (via GitHub)" <gi...@apache.org>.
desruisseaux commented on code in PR #1091:
URL: https://github.com/apache/maven-compiler-plugin/pull/1091#discussion_r3673295149
##########
src/main/java/org/apache/maven/plugin/compiler/CompilationOutputRegistry.java:
##########
@@ -0,0 +1,141 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.maven.plugin.compiler;
+
+import java.io.File;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.codehaus.plexus.compiler.util.scan.InclusionScanException;
+import org.codehaus.plexus.compiler.util.scan.mapping.SourceMapping;
+
+/**
+ * Tracks output files processed by compiler executions for the current project and Maven session.
+ *
+ * <p>Multiple compiler executions may share an output directory while using different compiler options.
+ * {@link org.apache.maven.shared.incremental.IncrementalBuildHelper} compares output file names before and after
+ * compilation, so it cannot detect an existing output overwritten by another execution. This registry lets a later
+ * execution detect that overlap without relying on file timestamps, whose precision varies between file systems.</p>
+ *
+ * <p>The registry is stored in Maven's plugin context, which is shared by all executions of this plugin for one
+ * project and discarded after the Maven session.</p>
+ */
+final class CompilationOutputRegistry {
+ private static final String KEY = CompilationOutputRegistry.class.getName() + ".compiledOutputs";
+
+ /**
+ * Prevents instantiation.
+ */
+ private CompilationOutputRegistry() {}
+
+ /**
+ * Maps sources to normalized absolute output paths.
+ *
+ * @param mapping mapping from source paths to output paths
+ * @param outputDirectory compiler output directory
+ * @param sourceRoots configured source roots
+ * @param sources sources selected by the compiler execution
+ * @return expected output paths
+ * @throws InclusionScanException if a source cannot be mapped
+ */
+ static Set<Path> mapOutputs(
+ SourceMapping mapping, File outputDirectory, List<String> sourceRoots, Set<File> sources)
+ throws InclusionScanException {
+ Set<Path> outputs = new HashSet<>();
+ for (String sourceRoot : sourceRoots) {
+ Path root = Paths.get(sourceRoot).toAbsolutePath().normalize();
+ for (File source : sources) {
+ Path path = source.toPath().toAbsolutePath().normalize();
+ if (path.startsWith(root)) {
+ for (File output : mapping.getTargetFiles(
+ outputDirectory, root.relativize(path).toString())) {
+ outputs.add(output.toPath().toAbsolutePath().normalize());
+ }
+ }
+ }
+ }
Review Comment:
Indeed, don't think that peoples declare both `src/main` and `src/main/java` directories in same time.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: issues-unsubscribe@maven.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] [MCOMPILER-578] Track outputs across compiler executions [maven-compiler-plugin]
Posted by "slawekjaranowski (via GitHub)" <gi...@apache.org>.
slawekjaranowski merged PR #1091:
URL: https://github.com/apache/maven-compiler-plugin/pull/1091
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: issues-unsubscribe@maven.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] [MCOMPILER-578] Track outputs across compiler executions [maven-compiler-plugin]
Posted by "slawekjaranowski (via GitHub)" <gi...@apache.org>.
slawekjaranowski commented on PR #1091:
URL: https://github.com/apache/maven-compiler-plugin/pull/1091#issuecomment-5423296881
@wilx interesting ... after merge we have:
```
[ERROR] src/main/java/org/apache/maven/plugin/compiler/AbstractCompilerMojo.java:[1] (sizes) FileLength: File length is 2,063 lines (max allowed is 2,000).
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: issues-unsubscribe@maven.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org