Плагин компилятора Maven

Maven Compiler Plugin

1. обзор

В этом кратком руководстве представлен плагинcompiler, один из основных плагинов инструмента сборки Maven.

Обзор других основных подключаемых модулей см. Вthis article.

2. Цели плагина

The compiler plugin is used to compile the source code of a Maven project. Этот плагин имеет две цели, которые уже связаны с определенными фазами жизненного цикла по умолчанию:

  • compile компилировать основные исходные файлы

  • testCompile скомпилировать тестовые исходные файлы

Вот плагинcompiler в POM:


    maven-compiler-plugin
    3.7.0
    
        ...
    

Мы можем найти последнюю версию этого плагинаhere.

3. конфигурация

By default, the compiler plugin compiles source code compatible with Java 5, and the generated classes also work with Java 5 regardless of the JDK in use. Мы можем изменить эти настройки в элементеconfiguration:


    1.8
    1.8
    <-- other customizations -->

Для удобства мы можем установить версию Java как свойства POM:


    1.8
    1.8

Иногда мы хотим передать аргументы компиляторуjavac. Здесь пригодится параметрcompilerArgs.

Например, мы можем указать следующую конфигурацию для компилятора для предупреждения о непроверенных операциях:


    
    
        -Xlint:unchecked
    

При компиляции этого класса:

public class Data {
    List textList = new ArrayList();

    public void addText(String text) {
        textList.add(text);
    }

    public List getTextList() {
        return this.textList;
    }
}

мы увидим непроверенное предупреждение на консоли:

[WARNING] ... Data.java:[7,29] unchecked conversion
  required: java.util.List
  found:    java.util.ArrayList

Поскольку обе цели подключаемого модуляcompiler автоматически привязаны к этапам жизненного цикла Maven по умолчанию, мы можем выполнить эти цели с помощью командmvn compile иmvn test-compile.

4. Java 9 Обновления

4.1. конфигурация

До Java 8 мы использовали номер версии как 1.x, гдеx представляет версию Java, например 1.8 для Java 8.

Для Java 9 и выше, мы можем просто использовать номер версии напрямую:


    9
    9

Точно так же мы можем определить версию, используяproperties как:


    9
    9

Maven добавил поддержку Java 9 в3.5.0,, поэтому нам понадобится как минимум эта версия. Нам также понадобится как минимум3.8.0 изthe maven-compiler-plugin:


    
        
            org.apache.maven.plugins
            maven-compiler-plugin
            3.8.0
            
                9
                9
            
        
    

4.2. строить

Пришло время протестировать нашу конфигурацию.

Во-первых, давайте создадим классMavenCompilerPlugin, в который мы импортируем пакетfrom another module.

Самый простой -javax.xml.XMLConstants.XML_NS_PREFIX:

public class MavenCompilerPlugin {
    public static void main(String[] args) {
        System.out.println("The XML namespace prefix is: "
          + XML_NS_PREFIX);
    }
}

Теперь давайте скомпилируем его:

mvn -q clean compile exec:java
  -Dexec.mainClass="com.example.maven.java9.MavenCompilerPlugin"

Однако при использовании настроек Java 9 по умолчанию мы получим ошибку:

[ERROR] COMPILATION ERROR :
[ERROR] .../MavenCompilerPlugin.java:[3,20]
  package javax.xml is not visible
  (package javax.xml is declared in module java.xml,
  but module com.example.maven.java9 does not read it)
[ERROR] .../MavenCompilerPlugin.java:[3,1]
  static import only from classes and interfaces
[ERROR] .../MavenCompilerPlugin.java:[7,62]
  cannot find symbol
symbol:   variable XML_NS_PREFIX
location: class com.example.maven.java9.MavenCompilerPlugin

Ошибка возникает из-за того, что этот пакет находится в отдельном модуле, который мы еще не включили в нашу сборку.

Самый простой способ решить эту проблему - создать классa module-info.java и указать, что нам нужен модульjava.xml:

module com.example.maven.java9 {
    requires java.xml;
}

Теперь мы можем попробовать еще раз:

mvn -q clean compile exec:java
  -Dexec.mainClass="com.example.maven.java9.MavenCompilerPlugin"

И наш вывод будет:

The XML namespace prefix is: xml

5. Заключение

В этой статье мы рассмотрели плагинcompiler и описали, как его использовать. Мы также узнали о поддержке Maven для Java 9.

Полный исходный код этого руководства можно найти наover on GitHub.