Apache

Specimen. A proposed redesign of maven.apache.org, built with mvn site and a skin of its own; not the official Apache Maven site. The official site is maven.apache.org. About this example

Docs Plugins Apache Maven Compiler Plugin

Version
3.16.0
Source
Edit this page
Wrong?
Report a problem

Using Non-Javac Compilers

Contrary to this plugin's name, the Compiler Plugin does not compile the sources of your project by itself. To compile, the Compiler Plugin uses another class to compile them.

The parameter compilerId determines which class will be used.

Currently, the Compiler Plugin is bundled with the javac compiler with artifactId plexus-compiler-javac version 2.17.0, which can be seen as one of the dependencies declared inside the Compiler Plugin's POM.

Plexus Compiler component has some other compiler Ids available under the groupId org.codehaus.plexus:

  • aspectj with artifactId plexus-compiler-aspectj - requires: JDK 17+ and Maven 3.9.6 +
  • csharp with artifactId plexus-compiler-csharp - requires: JDK 8+
  • eclipse with artifactId plexus-compiler-eclipse - requires: JDK 17+ and Maven 3.9.6 +
  • javac-with-errorprone with artifactId plexus-compiler-javac-errorprone - requires: JDK 11+

Using The Other Plexus Compilers

To use any of the non-javac compilers, you need to make the artifact available in the classpath when the Compiler Plugin runs. This is possible by adding the dependency when declaring the plugin in your project's pom.xml. The example below shows how to use the csharp compiler:

<project>
  [...]
  <build>
    [...]
    <plugins>
      [...]
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.16.0</version>
        <configuration>
          <compilerId>csharp</compilerId>
        </configuration>
        <dependencies>
          <dependency>
            <groupId>org.codehaus.plexus</groupId>
            <artifactId>plexus-compiler-csharp</artifactId>
            <version>2.17.0</version>
          </dependency>
        </dependencies>
      </plugin>
  [...]
</project>