В этом кратком руководстве представлен плагинcompiler, один из основных плагинов инструмента сборки Maven.
Обзор других основных подключаемых модулей см. Вthis article.
2. Цели плагина
The compiler plugin is used to compile the source code of a Maven project. Этот плагин имеет две цели, которые уже связаны с определенными фазами жизненного цикла по умолчанию:
Мы можем найти последнюю версию этого плагина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.81.8
<-- other customizations -->
Для удобства мы можем установить версию Java как свойства POM:
1.81.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;
}
}
мы увидим непроверенное предупреждение на консоли:
Поскольку обе цели подключаемого модуляcompiler автоматически привязаны к этапам жизненного цикла Maven по умолчанию, мы можем выполнить эти цели с помощью командmvn compile иmvn test-compile.
4. Java 9 Обновления
4.1. конфигурация
До Java 8 мы использовали номер версии как 1.x, гдеx представляет версию Java, например 1.8 для Java 8.
Для Java 9 и выше, мы можем просто использовать номер версии напрямую:
99
Точно так же мы можем определить версию, используяproperties как:
99
Maven добавил поддержку Java 9 в3.5.0,, поэтому нам понадобится как минимум эта версия. Нам также понадобится как минимум3.8.0 изthe maven-compiler-plugin:
Однако при использовании настроек 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: