Benjamin Marwell created MCOMPILER-408:
------------------------------------------

             Summary: CompileMojo resets project artifacts when used in verify 
phase
                 Key: MCOMPILER-408
                 URL: https://issues.apache.org/jira/browse/MCOMPILER-408
             Project: Maven Compiler Plugin
          Issue Type: Bug
    Affects Versions: 3.8.1, 3.8.0
         Environment: - Maven 3.6.2
- Maven compiler plugin <any>
- errorprone <any>
            Reporter: Benjamin Marwell


h2. Problem Description / Setup

I tried to execute the google error-prone plugin in the compile phase, but was 
unsatisfied with the outcome. However, it seemed to be a perfect fit for the 
{{verify}} phase. Other plugins will also use the verify phase, e.g. 
checkstyle. I will also compile it to a different folder (which is 
{{target/classes-errorprone}}).

However, when using the CompileMojo, it will always call 
[projectArtifact.setFile(dir);|[https://github.com/apache/maven-compiler-plugin/blob/master/src/main/java/org/apache/maven/plugin/compiler/CompilerMojo.java#L189]].
 There is no possibility to override this.

I do think this is not always the wanted behaviour.

Now, when executing 
{code:java}
mvn clean verify -Perrorprone {code}
the {{ear}} project will not find the {{war}} anymore, because the war had:
 * Compile phase creating target/classes
 * package phase, which set projectArtifact.setFile() to the {{.war}} file.
 * verify phase, which set projectArtifact.setFile() back to {{target/classes}}.

h2. Reproducible

Always, see above.
h2. Workarounds

Do not execute verify+errorprone together with your main target phase and all 
reactor projects (e.g. including ear). But this will need two compile steps 
(one for packaging, anothero ne for  error-prone).
h2. Expected behaviour

I can execute the maven-compiler-plugin with a compiler plugin like checkstyle 
in the verify phase without un-attaching any previous artifacts. At least as 
long as I compile into another directory.
h2. Actual behaviour

I cannot execute the compiler in the verify phase again using the 
{{maven-compiler-plugin}}, because it will reset my project artifacts.

 
h2. errorprone configuration
{code:java}
    <profile>
      <id>errorprone</id>
      <activation>
        <activeByDefault>false</activeByDefault>
      </activation>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <executions>
              <execution>
                <id>errorprone</id>
                <phase>verify</phase>
                <goals><goal>compile</goal></goals>
                <configuration>
                  <showWarnings>true</showWarnings>
                  <compilerArgs>
                    <arg>-XDcompilePolicy=simple</arg>
                    <arg>
                      -Xplugin:ErrorProne
                      ${plugin.errorprone.excluded.paths}
                      -XepDisableWarningsInGeneratedCode
                      ${plugin.errorprone.additional.checks}
                    </arg>
                    <arg>-d</arg>
                    <arg>${project.build.directory}/classes-ep</arg>
                  </compilerArgs>
                  <annotationProcessorPaths>
                    <path>
                      <groupId>com.google.errorprone</groupId>
                      <artifactId>error_prone_core</artifactId>
                      <version>${dependency.errorprone.core.version}</version>
                    </path>
                  </annotationProcessorPaths>
                  <useIncrementalCompilation>true</useIncrementalCompilation>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile> {code}
Note: I use incrementalCompilation=true which behaves like non-incremental 
compilation due to a bug which is open since ever.
h2. Proposed sulutions

Either create a new goal (compile-only) or provide a switch to not invoke 
[projectArtifact.setFile(outputdir)|[https://github.com/apache/maven-compiler-plugin/blob/master/src/main/java/org/apache/maven/plugin/compiler/CompilerMojo.java#L189]].

 



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to